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