rework Network send() code to use NetworkTarget/Node/Group::send classes, add a NetworkMessage class for sending NetworkObject messages, and fix a bug whereby the server's client TCP sockets weren't nonblocking.... I wonder how this has worked before?\!
#include <cassert>
#include "Node.hh"
NetworkNode::NetworkNode (NetworkSession &session, NetworkTCPTransport *tcp, NetworkUDP *udp, const NetworkAddress &address) :
session(session), tcp(tcp), udp(udp), address(address) {
// connect signals
slots.connect(tcp->sig_disconnect(), this, &NetworkNode::on_disconnect);
slots.connect(tcp->sig_packet(), &session, &NetworkSession::handle_message, this);
}
NetworkNode::~NetworkNode (void) {
delete tcp;
}
void NetworkNode::on_disconnect (void) {
// tell session
session.handle_disconnect(this);
// fire signal
_sig_disconnected();
// delete
// delete this;
}
void NetworkNode::send_pkt (const NetworkPacketBuffer &pkt, bool reliable) {
// either tcp or udp
if (reliable) {
assert(tcp);
tcp->write_packet(pkt);
} else {
udp->sendto(pkt, address);
}
}
const NetworkAddress& NetworkNode::getRemoteAddress (void) {
return address;
}