src/NetworkSession.hh
changeset 185 25becd2cb026
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/NetworkSession.hh	Wed Dec 03 19:16:32 2008 +0000
@@ -0,0 +1,58 @@
+#ifndef NETWORK_SESSION_HH
+#define NETWORK_SESSION_HH
+
+#include <map>
+#include <stdint.h>
+
+// 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"
+
+class NetworkSession {
+    friend class NetworkNode;
+
+    private:
+        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<NetworkPacket&, NetworkNode *> > _map_sig_chan_message;
+    
+    public:
+        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);
+        
+        void handle_disconnect (NetworkNode *node);
+        void handle_message (NetworkPacket &pkt, NetworkNode *node);
+
+    private:
+        void on_tcp_client (NetworkTCPTransport *client);
+        void on_udp_packet (NetworkPacket &pkt, const NetworkAddress &addr);
+
+        CL_Signal_v1<NetworkNode*> _sig_node_connected;
+
+    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_v2<NetworkPacket&, NetworkNode *>& sig_chan_message (NetworkChannelID cid) { return _map_sig_chan_message[cid]; }
+};
+
+#endif /* NETWORK_SESSION_HH */