You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
86 lines
2.2 KiB
86 lines
2.2 KiB
|
7 years ago
|
#pragma once
|
||
|
|
|
||
|
|
#include <array>
|
||
|
5 years ago
|
#include <deque>
|
||
|
|
#include <map>
|
||
|
7 years ago
|
#include <memory>
|
||
|
5 years ago
|
#include <string>
|
||
|
7 years ago
|
|
||
|
|
#include "dvlnet/abstract_net.h"
|
||
|
|
#include "dvlnet/packet.h"
|
||
|
|
|
||
|
5 years ago
|
namespace devilution {
|
||
|
7 years ago
|
namespace net {
|
||
|
|
|
||
|
|
class base : public abstract_net {
|
||
|
|
public:
|
||
|
|
virtual int create(std::string addrstr, std::string passwd) = 0;
|
||
|
|
virtual int join(std::string addrstr, std::string passwd) = 0;
|
||
|
|
|
||
|
|
virtual bool SNetReceiveMessage(int *sender, char **data, int *size);
|
||
|
|
virtual bool SNetSendMessage(int dest, void *data, unsigned int size);
|
||
|
|
virtual bool SNetReceiveTurns(char **data, unsigned int *size,
|
||
|
6 years ago
|
DWORD *status);
|
||
|
7 years ago
|
virtual bool SNetSendTurn(char *data, unsigned int size);
|
||
|
|
virtual int SNetGetProviderCaps(struct _SNETCAPS *caps);
|
||
|
|
virtual bool SNetRegisterEventHandler(event_type evtype,
|
||
|
6 years ago
|
SEVTHANDLER func);
|
||
|
7 years ago
|
virtual bool SNetUnregisterEventHandler(event_type evtype,
|
||
|
6 years ago
|
SEVTHANDLER func);
|
||
|
7 years ago
|
virtual bool SNetLeaveGame(int type);
|
||
|
|
virtual bool SNetDropPlayer(int playerid, DWORD flags);
|
||
|
|
virtual bool SNetGetOwnerTurnsWaiting(DWORD *turns);
|
||
|
5 years ago
|
virtual bool SNetGetTurnsInTransit(DWORD *turns);
|
||
|
7 years ago
|
|
||
|
|
virtual void poll() = 0;
|
||
|
|
virtual void send(packet &pkt) = 0;
|
||
|
5 years ago
|
virtual void disconnect_net(plr_t plr);
|
||
|
7 years ago
|
|
||
|
|
void setup_gameinfo(buffer_t info);
|
||
|
|
|
||
|
5 years ago
|
virtual void setup_password(std::string pw);
|
||
|
|
|
||
|
6 years ago
|
virtual ~base() = default;
|
||
|
|
|
||
|
7 years ago
|
protected:
|
||
|
|
std::map<event_type, SEVTHANDLER> registered_handlers;
|
||
|
|
buffer_t game_init_info;
|
||
|
|
|
||
|
|
struct message_t {
|
||
|
|
int sender; // change int to something else in devilution code later
|
||
|
|
buffer_t payload;
|
||
|
|
message_t()
|
||
|
6 years ago
|
: sender(-1)
|
||
|
|
, payload({})
|
||
|
7 years ago
|
{
|
||
|
|
}
|
||
|
|
message_t(int s, buffer_t p)
|
||
|
6 years ago
|
: sender(s)
|
||
|
|
, payload(p)
|
||
|
7 years ago
|
{
|
||
|
|
}
|
||
|
|
};
|
||
|
|
|
||
|
|
message_t message_last;
|
||
|
|
std::deque<message_t> message_queue;
|
||
|
|
std::array<turn_t, MAX_PLRS> turn_last = {};
|
||
|
|
std::array<std::deque<turn_t>, MAX_PLRS> turn_queue;
|
||
|
|
std::array<bool, MAX_PLRS> connected_table = {};
|
||
|
|
|
||
|
|
plr_t plr_self = PLR_BROADCAST;
|
||
|
|
cookie_t cookie_self = 0;
|
||
|
|
|
||
|
|
std::unique_ptr<packet_factory> pktfty;
|
||
|
|
|
||
|
|
void handle_accept(packet &pkt);
|
||
|
|
void recv_local(packet &pkt);
|
||
|
|
void run_event_handler(_SNETEVENT &ev);
|
||
|
|
|
||
|
|
private:
|
||
|
|
plr_t get_owner();
|
||
|
|
void clear_msg(plr_t plr);
|
||
|
|
};
|
||
|
|
|
||
|
|
} // namespace net
|
||
|
5 years ago
|
} // namespace devilution
|