37
|
1 |
|
|
2 |
#include <cassert>
|
33
|
3 |
|
|
4 |
#include "NetworkNode.hh"
|
|
5 |
|
37
|
6 |
NetworkNode::NetworkNode (NetworkSession &session, NetworkTCPTransport *tcp, NetworkUDP *udp, const NetworkAddress &address) :
|
33
|
7 |
session(session), tcp(tcp), udp(udp), address(address) {
|
|
8 |
|
|
9 |
// connect signals
|
36
|
10 |
slots.connect(tcp->sig_disconnect(), this, &NetworkNode::on_disconnect);
|
33
|
11 |
|
|
12 |
}
|
|
13 |
|
|
14 |
NetworkNode::~NetworkNode (void) {
|
|
15 |
delete tcp;
|
|
16 |
}
|
36
|
17 |
|
37
|
18 |
void NetworkNode::on_disconnect (void) {
|
36
|
19 |
// tell session
|
|
20 |
session.handle_disconnect(this);
|
|
21 |
|
|
22 |
// fire signal
|
|
23 |
_sig_disconnected();
|
|
24 |
|
|
25 |
// delete
|
|
26 |
delete this;
|
|
27 |
}
|
|
28 |
|
37
|
29 |
void NetworkNode::send (NetworkChannelID channel_id, const NetworkPacket &pkt, bool reliable) {
|
33
|
30 |
assert(channel_id > 0);
|
|
31 |
|
|
32 |
// add our header
|
|
33 |
NetworkPacket pkt2;
|
|
34 |
pkt2.write_uint16(channel_id);
|
|
35 |
pkt2.write_packet(pkt);
|
|
36 |
|
|
37 |
// either tcp or udp
|
|
38 |
if (reliable) {
|
|
39 |
assert(tcp);
|
|
40 |
|
|
41 |
tcp->write_packet(pkt2);
|
|
42 |
|
|
43 |
} else {
|
37
|
44 |
udp->sendto(pkt2, address);
|
33
|
45 |
}
|
|
46 |
}
|
|
47 |
|
|
48 |
const NetworkAddress& NetworkNode::getRemoteAddress (void) {
|
|
49 |
return address;
|
|
50 |
}
|