--- /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 */