src/proto2/NetworkNode.cc
author terom
Thu, 20 Nov 2008 20:27:12 +0000
branchno-netsession
changeset 37 ed2957490bbf
parent 36 785d220fc6b7
child 38 4189b8bf3a5b
permissions -rw-r--r--
compile step complete
37
ed2957490bbf compile step complete
terom
parents: 36
diff changeset
     1
ed2957490bbf compile step complete
terom
parents: 36
diff changeset
     2
#include <cassert>
33
e53f09b378f4 more untested, uncompiled code
terom
parents:
diff changeset
     3
e53f09b378f4 more untested, uncompiled code
terom
parents:
diff changeset
     4
#include "NetworkNode.hh"
e53f09b378f4 more untested, uncompiled code
terom
parents:
diff changeset
     5
37
ed2957490bbf compile step complete
terom
parents: 36
diff changeset
     6
NetworkNode::NetworkNode (NetworkSession &session, NetworkTCPTransport *tcp, NetworkUDP *udp, const NetworkAddress &address) :
33
e53f09b378f4 more untested, uncompiled code
terom
parents:
diff changeset
     7
    session(session), tcp(tcp), udp(udp), address(address) {
e53f09b378f4 more untested, uncompiled code
terom
parents:
diff changeset
     8
    
e53f09b378f4 more untested, uncompiled code
terom
parents:
diff changeset
     9
    // connect signals
36
terom
parents: 33
diff changeset
    10
    slots.connect(tcp->sig_disconnect(), this, &NetworkNode::on_disconnect);
33
e53f09b378f4 more untested, uncompiled code
terom
parents:
diff changeset
    11
    
e53f09b378f4 more untested, uncompiled code
terom
parents:
diff changeset
    12
}
e53f09b378f4 more untested, uncompiled code
terom
parents:
diff changeset
    13
e53f09b378f4 more untested, uncompiled code
terom
parents:
diff changeset
    14
NetworkNode::~NetworkNode (void) {
e53f09b378f4 more untested, uncompiled code
terom
parents:
diff changeset
    15
    delete tcp;
e53f09b378f4 more untested, uncompiled code
terom
parents:
diff changeset
    16
}
36
terom
parents: 33
diff changeset
    17
37
ed2957490bbf compile step complete
terom
parents: 36
diff changeset
    18
void NetworkNode::on_disconnect (void) {
36
terom
parents: 33
diff changeset
    19
    // tell session
terom
parents: 33
diff changeset
    20
    session.handle_disconnect(this);
terom
parents: 33
diff changeset
    21
terom
parents: 33
diff changeset
    22
    // fire signal
terom
parents: 33
diff changeset
    23
    _sig_disconnected();
terom
parents: 33
diff changeset
    24
    
terom
parents: 33
diff changeset
    25
    // delete
terom
parents: 33
diff changeset
    26
    delete this;
terom
parents: 33
diff changeset
    27
}
terom
parents: 33
diff changeset
    28
37
ed2957490bbf compile step complete
terom
parents: 36
diff changeset
    29
void NetworkNode::send (NetworkChannelID channel_id, const NetworkPacket &pkt, bool reliable) {
33
e53f09b378f4 more untested, uncompiled code
terom
parents:
diff changeset
    30
    assert(channel_id > 0);
e53f09b378f4 more untested, uncompiled code
terom
parents:
diff changeset
    31
    
e53f09b378f4 more untested, uncompiled code
terom
parents:
diff changeset
    32
    // add our header
e53f09b378f4 more untested, uncompiled code
terom
parents:
diff changeset
    33
    NetworkPacket pkt2;
e53f09b378f4 more untested, uncompiled code
terom
parents:
diff changeset
    34
    pkt2.write_uint16(channel_id);
e53f09b378f4 more untested, uncompiled code
terom
parents:
diff changeset
    35
    pkt2.write_packet(pkt);
e53f09b378f4 more untested, uncompiled code
terom
parents:
diff changeset
    36
    
e53f09b378f4 more untested, uncompiled code
terom
parents:
diff changeset
    37
    // either tcp or udp
e53f09b378f4 more untested, uncompiled code
terom
parents:
diff changeset
    38
    if (reliable) {
e53f09b378f4 more untested, uncompiled code
terom
parents:
diff changeset
    39
        assert(tcp);
e53f09b378f4 more untested, uncompiled code
terom
parents:
diff changeset
    40
e53f09b378f4 more untested, uncompiled code
terom
parents:
diff changeset
    41
        tcp->write_packet(pkt2);
e53f09b378f4 more untested, uncompiled code
terom
parents:
diff changeset
    42
e53f09b378f4 more untested, uncompiled code
terom
parents:
diff changeset
    43
    } else {
37
ed2957490bbf compile step complete
terom
parents: 36
diff changeset
    44
        udp->sendto(pkt2, address);
33
e53f09b378f4 more untested, uncompiled code
terom
parents:
diff changeset
    45
    }
e53f09b378f4 more untested, uncompiled code
terom
parents:
diff changeset
    46
}
e53f09b378f4 more untested, uncompiled code
terom
parents:
diff changeset
    47
        
e53f09b378f4 more untested, uncompiled code
terom
parents:
diff changeset
    48
const NetworkAddress& NetworkNode::getRemoteAddress (void) {
e53f09b378f4 more untested, uncompiled code
terom
parents:
diff changeset
    49
    return address;
e53f09b378f4 more untested, uncompiled code
terom
parents:
diff changeset
    50
}