diff --git a/Code/Game/GameClient/GameClientState/LanMenuState.cpp b/Code/Game/GameClient/GameClientState/LanMenuState.cpp index 0eaa4d95..432770b9 100644 --- a/Code/Game/GameClient/GameClientState/LanMenuState.cpp +++ b/Code/Game/GameClient/GameClientState/LanMenuState.cpp @@ -194,7 +194,6 @@ const GameClientState::NetEvent& LanMenuState::DataRecieved( const NetEvent &mes std::string ip = decoded.ip; std::string name = decoded.name; printf("Broadcast message: %d: %s: %s\n", port, ip.c_str(), name.c_str()); - this->privData->connectIP->AppendText(L"Hej"); } break; diff --git a/Code/Network/NetworkAPI/NetworkClient.cpp b/Code/Network/NetworkAPI/NetworkClient.cpp index 91bd13cb..57155ef7 100644 --- a/Code/Network/NetworkAPI/NetworkClient.cpp +++ b/Code/Network/NetworkAPI/NetworkClient.cpp @@ -736,19 +736,22 @@ bool NetworkClient::StartListeningForBroadcasting(unsigned short port) void NetworkClient::StopListeningForBroadcasting() { - if(this->privateData->broadcastingStarted) + if(this->privateData) { - //Tell the thread to shutdown - WSASetEvent(this->privateData->broadcastShutdownEvent); + if(this->privateData->broadcastingStarted) + { + //Tell the thread to shutdown + WSASetEvent(this->privateData->broadcastShutdownEvent); - //Wait for thread - this->privateData->broadcastThread.join(); + //Wait for thread + this->privateData->broadcastThread.join(); - WSACloseEvent(this->privateData->broadcastEvent); - CloseHandle(this->privateData->broadcastShutdownEvent); + WSACloseEvent(this->privateData->broadcastEvent); + CloseHandle(this->privateData->broadcastShutdownEvent); - this->privateData->broadcastConnection.Disconnect(); + this->privateData->broadcastConnection.Disconnect(); - this->privateData->broadcastingStarted = false; + this->privateData->broadcastingStarted = false; + } } } diff --git a/Code/Network/NetworkAPI/NetworkServer.cpp b/Code/Network/NetworkAPI/NetworkServer.cpp index d666ca49..a761c207 100644 --- a/Code/Network/NetworkAPI/NetworkServer.cpp +++ b/Code/Network/NetworkAPI/NetworkServer.cpp @@ -20,6 +20,7 @@ #include "Thread/OysterThread.h" #include "WinTimer.h" +#include using namespace Oyster::Network; using namespace Utility::DynamicMemory; @@ -83,6 +84,7 @@ public: , port(-1) , broadcast(0) , broadcastTime(1.0f, 0.0f) + , broadcastMutex(new std::mutex) { InitWinSock(); serverOptions.broadcastOptions.broadcastInterval = 1.0f; @@ -100,12 +102,6 @@ public: } } - - void SendBroadcast() - { - broadcastConnection.Send(broadcastMessage); - } - bool DoWork(); public: @@ -123,6 +119,7 @@ public: ServerOptions serverOptions; + SmartPointer broadcastMutex; ConnectionUDP broadcastConnection; OysterByte broadcastMessage; @@ -135,15 +132,16 @@ bool NetworkServer::PrivateData::DoWork() { if(serverOptions.broadcastOptions.broadcast) { - if( (this->serverTimer.getElapsedSeconds() - this->broadcastTime.previous) >= this->broadcastTime.length ) + if( (this->serverTimer.getElapsedSeconds() - this->broadcastTime.previous) >= this->serverOptions.broadcastOptions.broadcastInterval ) { - broadcastMessage.Clear(); - Translator t; - t.Pack(broadcastMessage, serverOptions.broadcastOptions.broadcastMessage); + //broadcastMessage.Clear(); + //Translator t; + //t.Pack(broadcastMessage, serverOptions.broadcastOptions.broadcastMessage); serverTimer.reset(); - //Broadcast(); - SendBroadcast(); - + + broadcastMutex->lock(); + broadcastConnection.Send(broadcastMessage); + broadcastMutex->unlock(); } } @@ -353,29 +351,41 @@ int NetworkServer::GetPort() //Set broadcast settings. void NetworkServer::SetBroadcast(CustomNetProtocol& broadcastMessage, float interval, bool enable) { + this->privateData->broadcastMutex->lock(); this->privateData->serverOptions.broadcastOptions.broadcast = enable; this->privateData->serverOptions.broadcastOptions.broadcastMessage = broadcastMessage; this->privateData->serverOptions.broadcastOptions.broadcastInterval = interval; + + this->privateData->broadcastMessage.Clear(); Translator t; t.Pack(this->privateData->broadcastMessage, broadcastMessage); + this->privateData->broadcastMutex->unlock(); } //Set broadcast settings. void NetworkServer::SetBroadcastMessage(CustomNetProtocol& broadcastMessage) { + this->privateData->broadcastMutex->lock(); this->privateData->serverOptions.broadcastOptions.broadcastMessage = broadcastMessage; + + this->privateData->broadcastMessage.Clear(); Translator t; t.Pack(this->privateData->broadcastMessage, broadcastMessage); + this->privateData->broadcastMutex->unlock(); } //Enable/disable broadcast. void NetworkServer::SetBroadcast(bool enable) { + this->privateData->broadcastMutex->lock(); this->privateData->serverOptions.broadcastOptions.broadcast = enable; + this->privateData->broadcastMutex->unlock(); } //Set interval between each broadcast message in seconds. void NetworkServer::SetBroadcastInterval(float interval) { + this->privateData->broadcastMutex->lock(); this->privateData->serverOptions.broadcastOptions.broadcastInterval = interval; + this->privateData->broadcastMutex->unlock(); } \ No newline at end of file