#ifndef NETWORK_SESSION_HH
#define NETWORK_SESSION_HH
#include "NetworkTCP.hh"
#include "NetworkUDP.hh"
#include <map>
/*
* Should be set to some 8-char magic value to identify the application
*/
typedef char[8] NetworkSessionMagic;
/*
* Used to separate packets, ID zero is reserved for NetworkSession use
*/
typedef uint16_t NetworkChannelID;
class NetworkSession {
private:
NetworkSessionMagic magic;
NetworkTCPServer *tcp_srv;
NetworkUDP *udp_srv, *udp_client;
CL_SlotContainer slots;
std::map<NetworkAddress, NetworkNode*> nodes;
public:
NetworkSession (NetworkSessionMagic magic);
void listen (const NetworkAddress &addr);
NetworkNode* connect (const NetworkAddress &addr);
private:
void on_tcp_client (const NetworkTCPTransport *client);
void on_disconnect (NetworkNode *node);
public:
void send_all (NetworkChannelID channel_id, const NetworkPacket &pkt, bool reliable = true);
void send_all_except (NetworkChannelID channel_id, const NetworkPacket &pkt, const NetworkNode *node, bool reliable = true);
CL_Signal_v1<NetworkNode*> sig_node_connected;
CL_Signal_v1<NetworkNode*> sig_node_disconnected;
};
#endif /* NETWORK_SESSION_HH */