attempt to fix threaded network send bug

This commit is contained in:
Mark Vejvoda 2010-06-03 21:49:41 +00:00
parent ff6d90a5f1
commit 4227d2bd1d
2 changed files with 14 additions and 3 deletions

View File

@ -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;
};

View File

@ -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;