src/proto2/NetworkSession.hh
branchno-netsession
changeset 36 785d220fc6b7
parent 34 1ea6554d703e
child 37 ed2957490bbf
--- 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 */