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 } |