summaryrefslogtreecommitdiffstats
path: root/src/Net/Connection.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/Net/Connection.h')
-rw-r--r--src/Net/Connection.h17
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> &notify);
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;
}