terom@37: terom@37: #include terom@33: terom@33: #include "NetworkNode.hh" terom@33: terom@37: NetworkNode::NetworkNode (NetworkSession &session, NetworkTCPTransport *tcp, NetworkUDP *udp, const NetworkAddress &address) : terom@33: session(session), tcp(tcp), udp(udp), address(address) { terom@33: terom@33: // connect signals terom@36: slots.connect(tcp->sig_disconnect(), this, &NetworkNode::on_disconnect); terom@39: slots.connect(tcp->sig_packet(), &session, &NetworkSession::handle_message, this); terom@33: terom@33: } terom@33: terom@33: NetworkNode::~NetworkNode (void) { terom@33: delete tcp; terom@33: } terom@36: terom@37: void NetworkNode::on_disconnect (void) { terom@36: // tell session terom@36: session.handle_disconnect(this); terom@36: terom@36: // fire signal terom@36: _sig_disconnected(); terom@36: terom@36: // delete terom@38: // delete this; terom@36: } terom@36: terom@37: void NetworkNode::send (NetworkChannelID channel_id, const NetworkPacket &pkt, bool reliable) { terom@33: assert(channel_id > 0); terom@33: terom@33: // add our header terom@33: NetworkPacket pkt2; terom@33: pkt2.write_uint16(channel_id); terom@33: pkt2.write_packet(pkt); terom@33: terom@33: // either tcp or udp terom@33: if (reliable) { terom@33: assert(tcp); terom@33: terom@33: tcp->write_packet(pkt2); terom@33: terom@33: } else { terom@37: udp->sendto(pkt2, address); terom@33: } terom@33: } terom@33: terom@33: const NetworkAddress& NetworkNode::getRemoteAddress (void) { terom@33: return address; terom@33: }