src/proto2/NetworkSession.hh
branchno-netsession
changeset 33 e53f09b378f4
child 34 1ea6554d703e
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/proto2/NetworkSession.hh	Mon Nov 10 19:57:57 2008 +0000
@@ -0,0 +1,47 @@
+#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 */