From 4227d2bd1d4b7d3a2430efd8485035684b96bc35 Mon Sep 17 00:00:00 2001 From: Mark Vejvoda Date: Thu, 3 Jun 2010 21:49:41 +0000 Subject: [PATCH] attempt to fix threaded network send bug --- source/glest_game/network/connection_slot.h | 11 ++++++++++- source/glest_game/network/server_interface.cpp | 6 ++++-- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/source/glest_game/network/connection_slot.h b/source/glest_game/network/connection_slot.h index df9869e6..1e4b17d3 100644 --- a/source/glest_game/network/connection_slot.h +++ b/source/glest_game/network/connection_slot.h @@ -31,10 +31,18 @@ class ConnectionSlot; // class ConnectionSlotThread // ===================================================== +enum ConnectionSlotEventType +{ + eNone, + eReceiveSocketData, + eSendSocketData +}; + class ConnectionSlotEvent { public: ConnectionSlotEvent() { + eventType = eNone; triggerId = -1; connectionSlot = NULL; networkMessage = NULL; @@ -44,7 +52,8 @@ public: int64 triggerId; ConnectionSlot* connectionSlot; - const NetworkMessage* networkMessage; + ConnectionSlotEventType eventType; + const NetworkMessage *networkMessage; bool socketTriggered; bool eventCompleted; }; diff --git a/source/glest_game/network/server_interface.cpp b/source/glest_game/network/server_interface.cpp index f43ccea3..d7343ce5 100644 --- a/source/glest_game/network/server_interface.cpp +++ b/source/glest_game/network/server_interface.cpp @@ -148,11 +148,11 @@ void ServerInterface::slotUpdateTask(ConnectionSlotEvent *event) { if(event != NULL) { SystemFlags::OutputDebug(SystemFlags::debugNetwork,"In [%s::%s Line: %d]\n",__FILE__,__FUNCTION__,__LINE__); - if(event->networkMessage != NULL) { + if(event->eventType == eSendSocketData) { SystemFlags::OutputDebug(SystemFlags::debugNetwork,"In [%s::%s] before sendMessage, event->networkMessage = %p\n",__FILE__,__FUNCTION__,event->networkMessage); event->connectionSlot->sendMessage(event->networkMessage); } - else { + else if(event->eventType == eReceiveSocketData) { SystemFlags::OutputDebug(SystemFlags::debugNetwork,"In [%s::%s Line: %d]\n",__FILE__,__FUNCTION__,__LINE__); updateSlot(event); } @@ -234,6 +234,7 @@ void ServerInterface::update() { bool socketTriggered = (connectionSlot != NULL && connectionSlot->getSocket() != NULL ? socketTriggeredList[connectionSlot->getSocket()->getSocketId()] : false); ConnectionSlotEvent &event = eventList[i]; + event.eventType = eReceiveSocketData; event.networkMessage = NULL; event.connectionSlot = connectionSlot; event.socketTriggered = socketTriggered; @@ -708,6 +709,7 @@ void ServerInterface::broadcastMessage(const NetworkMessage* networkMessage, int SystemFlags::OutputDebug(SystemFlags::debugNetwork,"In [%s::%s Line: %d] networkMessage = %p\n",__FILE__,__FUNCTION__,__LINE__,networkMessage); ConnectionSlotEvent &event = eventList[i]; + event.eventType = eSendSocketData; event.networkMessage = networkMessage; event.connectionSlot = connectionSlot; event.socketTriggered = true;