diff options
Diffstat (limited to 'src/Net/Connection.h')
-rw-r--r-- | src/Net/Connection.h | 17 |
1 files changed, 15 insertions, 2 deletions
diff --git a/src/Net/Connection.h b/src/Net/Connection.h index 0880036..e147ad2 100644 --- a/src/Net/Connection.h +++ b/src/Net/Connection.h @@ -54,6 +54,8 @@ class Connection { sigc::signal<void,const Connection*,const Packet&> signal; + void doHandshake(); + void packetHeaderReceiveHandler(const void *data, unsigned long length); void packetDataReceiveHandler(const void *data, unsigned long length); @@ -86,13 +88,24 @@ class Connection { IPAddress *peer; - void handshake(); + void handshake() { + if(isConnected()) + return; + + state = HANDSHAKE; + + doHandshake(); + } + virtual void connectionHeader() = 0; bool rawReceive(unsigned long length, const sigc::slot<void,const void*,unsigned long> ¬ify); bool rawSend(const unsigned char *data, unsigned long length); bool enterReceiveLoop() { + if(!isConnected()) + return false; + state = PACKET_HEADER; return rawReceive(sizeof(Packet::Data), sigc::mem_fun(this, &Connection::packetHeaderReceiveHandler)); @@ -137,7 +150,7 @@ class Connection { void sendReceive() { if(state == HANDSHAKE) { - handshake(); + doHandshake(); return; } |