src/Network/Node.cc
author Tero Marttila <terom@fixme.fi>
Mon, 26 Jan 2009 23:03:47 +0200
changeset 431 c6d7272a164b
parent 202 b3f5d766391e
permissions -rw-r--r--
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;
}