--- a/src/proto2/NetworkSession.hh Tue Nov 18 22:58:50 2008 +0000
+++ b/src/proto2/NetworkSession.hh Thu Nov 20 19:25:56 2008 +0000
@@ -1,52 +1,52 @@
#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;
+// forward-declare
+class NetworkSession;
/*
* Used to separate packets, ID zero is reserved for NetworkSession use
*/
typedef uint16_t NetworkChannelID;
+#include "NetworkTCP.hh"
+#include "NetworkUDP.hh"
+#include "NetworkNode.hh"
+
+#include <map>
+
class NetworkSession {
private:
- NetworkSessionMagic magic;
+ uint64_t magic;
NetworkTCPServer *tcp_srv;
NetworkUDP *udp_srv, *udp_client;
CL_SlotContainer slots;
std::map<NetworkAddress, NetworkNode*> nodes;
- std::map<NetworkChannelID, CL_Signal_v2<const NetworkPacket&, NetworkNode *>> _map_sig_chan_message;
+ std::map<NetworkChannelID, CL_Signal_v2<NetworkPacket&, NetworkNode *> > _map_sig_chan_message;
public:
- NetworkSession (NetworkSessionMagic magic);
+ NetworkSession (uint64_t magic);
void listen (const NetworkAddress &addr);
NetworkNode* connect (const NetworkAddress &addr);
+
+ protected:
+ virtual NetworkNode *build_node (NetworkTCPTransport *tcp, NetworkUDP *udp, const NetworkAddress &addr, enum NetworkNodeType type);
private:
- void on_tcp_client (const NetworkTCPTransport *client);
- void on_disconnect (NetworkNode *node);
+ void on_tcp_client (NetworkTCPTransport *client);
+ void handle_disconnect (NetworkNode *node);
CL_Signal_v1<NetworkNode*> _sig_node_connected;
- CL_Signal_v1<NetworkNode*> _sig_node_disconnected;
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 (void) { return _sig_node_connected; }
- CL_Signal_v1<NetworkNode*> sig_node_disconnected (void) { return _sig_node_disconnected; }
- CL_Signal_v2<const NetworkPacket&, NetworkNode *>& sig_chan_message (NetworkChannelID cid) { return _map_sig_chan_message(cid); }
+ CL_Signal_v1<NetworkNode*>& sig_node_connected (void) { return _sig_node_connected; }
+ CL_Signal_v2<NetworkPacket&, NetworkNode *>& sig_chan_message (NetworkChannelID cid) { return _map_sig_chan_message[cid]; }
};
#endif /* NETWORK_SESSION_HH */