src/proto2/NetworkSession.cc
branchno-netsession
changeset 36 785d220fc6b7
parent 34 1ea6554d703e
child 37 ed2957490bbf
--- a/src/proto2/NetworkSession.cc	Tue Nov 18 22:58:50 2008 +0000
+++ b/src/proto2/NetworkSession.cc	Thu Nov 20 19:25:56 2008 +0000
@@ -18,6 +18,14 @@
     slots.connect(tcp->sig_client(), this, &NetworkSession::on_tcp_client);
 }
         
+NetworkNode *NetworkSession::build_node (NetworkTCPTransport *tcp_client, NetworkUDP *udp, const NetworkAddress &addr, , enum NetworkNodeType type) {
+    // XXX: unused
+    (void) type;
+
+    // create node
+    return new NetworkNode(*this, tcp_client, addr);
+}
+
 NetworkNode* NetworkSession::connect (const NetworkAddress &addr) {
     // create new UDP client if needed
     if (udp_client == NULL)
@@ -25,9 +33,9 @@
 
     // connect
     NetworkTCPClient *tcp_client = new NetworkTCPClient(addr);
-
-    // create node
-    NetworkNode *client_node = new NetworkNode(*this, tcp_client, udp_client, addr);
+    
+    // build client
+    NetworkNode *client_node = build_node(tcp_client, udp_client, addr, NETWORK_NODE_CLIENT_SERVER);
 
     // add to nodes
     nodes[addr] = client_node;
@@ -36,32 +44,23 @@
     slots.connect(tcp_client->sig_disconnect(), this, &NetworkSession::on_disconnect, client_node);
 }
         
-void NetworkSession::on_tcp_client (const NetworkTCPTransport *tcp_client) {
+void NetworkSession::on_tcp_client (NetworkTCPTransport *tcp_client) {
     // get remote address manually, because NetworkTCPServer doesn't pass it in to us
     NetworkAddress addr = tcp_client->getRemoteAddress();
 
-    // create node
-    NetworkNode *client_node = new NetworkNode(*this, tcp_client, udp_server, addr);
+    // build client
+    NetworkNode *client_node = build_node(tcp_client, udp_server, addr, NETWORK_NODE_SERVER_CLIENT);
 
     // add to nodes
     nodes[addr] = client_node;
 
-    // bind signals
-    slots.connect(tcp_client->sig_disconnect(), this, &NetworkSession::on_disconnect, client_node);
-
     // fire signals
     _sig_node_connected(node);
 }
         
-void NetworkSession::on_disconnect (NetworkNode *node) {
+void NetworkSession::handle_disconnect (NetworkNode *node) {
     // remove from nodes
     nodes.erase(node->getRemoteAddress());
-
-    // fire signal
-    _sig_node_disconnected(node);
-    
-    // delete
-    delete node;
 }
         
 void NetworkSession::send_all (NetworkChannelID channel_id, const NetworkPacket &pkt, bool reliable) {