src/proto2/NetworkSession.cc
branchno-netsession
changeset 36 785d220fc6b7
parent 34 1ea6554d703e
child 37 ed2957490bbf
equal deleted inserted replaced
35:e21cfda0edde 36:785d220fc6b7
    16     
    16     
    17     // connect signals
    17     // connect signals
    18     slots.connect(tcp->sig_client(), this, &NetworkSession::on_tcp_client);
    18     slots.connect(tcp->sig_client(), this, &NetworkSession::on_tcp_client);
    19 }
    19 }
    20         
    20         
       
    21 NetworkNode *NetworkSession::build_node (NetworkTCPTransport *tcp_client, NetworkUDP *udp, const NetworkAddress &addr, , enum NetworkNodeType type) {
       
    22     // XXX: unused
       
    23     (void) type;
       
    24 
       
    25     // create node
       
    26     return new NetworkNode(*this, tcp_client, addr);
       
    27 }
       
    28 
    21 NetworkNode* NetworkSession::connect (const NetworkAddress &addr) {
    29 NetworkNode* NetworkSession::connect (const NetworkAddress &addr) {
    22     // create new UDP client if needed
    30     // create new UDP client if needed
    23     if (udp_client == NULL)
    31     if (udp_client == NULL)
    24         udp_client = new NetworkUDP();
    32         udp_client = new NetworkUDP();
    25 
    33 
    26     // connect
    34     // connect
    27     NetworkTCPClient *tcp_client = new NetworkTCPClient(addr);
    35     NetworkTCPClient *tcp_client = new NetworkTCPClient(addr);
    28 
    36     
    29     // create node
    37     // build client
    30     NetworkNode *client_node = new NetworkNode(*this, tcp_client, udp_client, addr);
    38     NetworkNode *client_node = build_node(tcp_client, udp_client, addr, NETWORK_NODE_CLIENT_SERVER);
    31 
    39 
    32     // add to nodes
    40     // add to nodes
    33     nodes[addr] = client_node;
    41     nodes[addr] = client_node;
    34 
    42 
    35     // bind signals
    43     // bind signals
    36     slots.connect(tcp_client->sig_disconnect(), this, &NetworkSession::on_disconnect, client_node);
    44     slots.connect(tcp_client->sig_disconnect(), this, &NetworkSession::on_disconnect, client_node);
    37 }
    45 }
    38         
    46         
    39 void NetworkSession::on_tcp_client (const NetworkTCPTransport *tcp_client) {
    47 void NetworkSession::on_tcp_client (NetworkTCPTransport *tcp_client) {
    40     // get remote address manually, because NetworkTCPServer doesn't pass it in to us
    48     // get remote address manually, because NetworkTCPServer doesn't pass it in to us
    41     NetworkAddress addr = tcp_client->getRemoteAddress();
    49     NetworkAddress addr = tcp_client->getRemoteAddress();
    42 
    50 
    43     // create node
    51     // build client
    44     NetworkNode *client_node = new NetworkNode(*this, tcp_client, udp_server, addr);
    52     NetworkNode *client_node = build_node(tcp_client, udp_server, addr, NETWORK_NODE_SERVER_CLIENT);
    45 
    53 
    46     // add to nodes
    54     // add to nodes
    47     nodes[addr] = client_node;
    55     nodes[addr] = client_node;
    48 
       
    49     // bind signals
       
    50     slots.connect(tcp_client->sig_disconnect(), this, &NetworkSession::on_disconnect, client_node);
       
    51 
    56 
    52     // fire signals
    57     // fire signals
    53     _sig_node_connected(node);
    58     _sig_node_connected(node);
    54 }
    59 }
    55         
    60         
    56 void NetworkSession::on_disconnect (NetworkNode *node) {
    61 void NetworkSession::handle_disconnect (NetworkNode *node) {
    57     // remove from nodes
    62     // remove from nodes
    58     nodes.erase(node->getRemoteAddress());
    63     nodes.erase(node->getRemoteAddress());
    59 
       
    60     // fire signal
       
    61     _sig_node_disconnected(node);
       
    62     
       
    63     // delete
       
    64     delete node;
       
    65 }
    64 }
    66         
    65         
    67 void NetworkSession::send_all (NetworkChannelID channel_id, const NetworkPacket &pkt, bool reliable) {
    66 void NetworkSession::send_all (NetworkChannelID channel_id, const NetworkPacket &pkt, bool reliable) {
    68     send_all_except(NULL, reliable);
    67     send_all_except(NULL, reliable);
    69 }
    68 }