blob: 40ad5fbf9e78f9bf8c8fc1c78fa48ba68c655a08 [file] [log] [blame]
#pragma once
#include <cstdint>
#include <string>
#include "SDL_net.h"
class Multiplayer final {
public:
enum class Mode {
Auto,
Listen,
Connect
};
Multiplayer(Mode mode, const std::string &address);
~Multiplayer();
void update();
bool is_connected() const;
void set_enabled(bool enabled);
void send_message(const uint8_t *data, uint16_t length);
private:
void setup();
void disconnect();
void stop_listening();
Mode mode;
std::string address;
bool enabled = false, handshake = false;
TCPsocket socket = nullptr, listen_socket = nullptr;
SDLNet_SocketSet sock_set = nullptr;
static const int retry_interval = 5000;
Uint32 last_connect_time = 0;
uint8_t head_buf[8];
int head_off = 0;
uint8_t *recv_buf = nullptr;
uint16_t recv_len = 0, recv_off = 0;
};