Ticket #3806: 3556_dedServer_v0.2.patch
File 3556_dedServer_v0.2.patch, 7.0 KB (added by , 8 years ago) |
---|
-
source/gui/scripting/ScriptFunctions.cpp
332 332 333 333 void SetNetworkGameAttributes(ScriptInterface::CxPrivate* pCxPrivate, JS::HandleValue attribs1) 334 334 { 335 ENSURE(g_Net Server);335 ENSURE(g_NetClient); 336 336 //TODO: This is a workaround because we need to pass a MutableHandle to a JSAPI functions somewhere 337 337 // (with no obvious reason). 338 338 JSContext* cx = pCxPrivate->pScriptInterface->GetContext(); … … 339 339 JSAutoRequest rq(cx); 340 340 JS::RootedValue attribs(cx, attribs1); 341 341 342 g_Net Server->UpdateGameAttributes(&attribs, *(pCxPrivate->pScriptInterface));342 g_NetClient->SendGameSetupMessage(&attribs, *(pCxPrivate->pScriptInterface)); 343 343 } 344 344 345 345 void StartNetworkHost(ScriptInterface::CxPrivate* pCxPrivate, const std::wstring& playerName) … … 425 425 426 426 void AssignNetworkPlayer(ScriptInterface::CxPrivate* UNUSED(pCxPrivate), int playerID, const std::string& guid) 427 427 { 428 ENSURE(g_Net Server);428 ENSURE(g_NetClient); 429 429 430 g_Net Server->AssignPlayer(playerID, guid);430 g_NetClient->SendAssignPlayerMessage(playerID, guid); 431 431 } 432 432 433 433 void SetNetworkPlayerStatus(ScriptInterface::CxPrivate* UNUSED(pCxPrivate), const std::string& guid, int ready) -
source/network/NetClient.cpp
323 323 SetCurrState(NCS_UNCONNECTED); 324 324 } 325 325 326 void CNetClient::SendGameSetupMessage(JS::MutableHandleValue attrs, ScriptInterface& scriptInterface) 327 { 328 JSContext* cx = scriptInterface.GetContext(); 329 JS::RootedValue attrsRooted(cx); 330 attrsRooted = attrs; 331 332 CGameSetupMessage gameSetup(scriptInterface); 333 gameSetup.m_Data = attrsRooted; 334 SendMessage(&gameSetup); 335 } 336 337 void CNetClient::SendAssignPlayerMessage(const int playerID, const std::string& guid) 338 { 339 CAssignPlayerMessage assignPlayer; 340 assignPlayer.m_PlayerID = playerID; 341 assignPlayer.m_GUIDToAssign = guid; 342 SendMessage(&assignPlayer); 343 } 344 326 345 void CNetClient::SendChatMessage(const std::wstring& text) 327 346 { 328 347 CChatMessage chat; -
source/network/NetClient.h
187 187 */ 188 188 void LoadFinished(); 189 189 190 void SendGameSetupMessage(JS::MutableHandleValue attrs, ScriptInterface& scriptInterface); 191 192 void SendAssignPlayerMessage(const int playerID, const std::string& guid); 193 190 194 void SendChatMessage(const std::wstring& text); 191 195 192 196 void SendReadyMessage(const int status); -
source/network/NetMessage.cpp
203 203 pNewMessage = new CSimulationMessage(scriptInterface); 204 204 break; 205 205 206 case NMT_ASSIGN_PLAYER: 207 pNewMessage = new CAssignPlayerMessage; 208 break; 209 206 210 default: 207 211 LOGERROR("CNetMessageFactory::CreateMessage(): Unknown message type '%d' received", header.GetType()); 208 212 break; -
source/network/NetMessages.h
28 28 29 29 #define PS_PROTOCOL_MAGIC 0x5073013f // 'P', 's', 0x01, '?' 30 30 #define PS_PROTOCOL_MAGIC_RESPONSE 0x50630121 // 'P', 'c', 0x01, '!' 31 #define PS_PROTOCOL_VERSION 0x0101001 3// Arbitrary protocol31 #define PS_PROTOCOL_VERSION 0x01010014 // Arbitrary protocol 32 32 #define PS_DEFAULT_PORT 0x5073 // 'P', 's' 33 33 34 34 // Defines the list of message types. The order of the list must not change. … … 51 51 NMT_CHAT, 52 52 NMT_READY, 53 53 NMT_GAME_SETUP, 54 NMT_ASSIGN_PLAYER, 54 55 NMT_PLAYER_ASSIGNMENT, 55 56 56 57 NMT_FILE_TRANSFER_REQUEST, … … 218 219 NMT_END_ARRAY() 219 220 END_NMT_CLASS() 220 221 222 START_NMT_CLASS_(AssignPlayer, NMT_ASSIGN_PLAYER) 223 NMT_FIELD_INT(m_PlayerID, i8, 1) 224 NMT_FIELD(CStr, m_GUIDToAssign) 225 END_NMT_CLASS() 226 221 227 END_NMTS() 222 228 223 229 #else -
source/network/NetServer.cpp
649 649 session->AddTransition(NSS_PREGAME, (uint)NMT_CONNECTION_LOST, NSS_UNCONNECTED, (void*)&OnDisconnect, context); 650 650 session->AddTransition(NSS_PREGAME, (uint)NMT_CHAT, NSS_PREGAME, (void*)&OnChat, context); 651 651 session->AddTransition(NSS_PREGAME, (uint)NMT_READY, NSS_PREGAME, (void*)&OnReady, context); 652 session->AddTransition(NSS_PREGAME, (uint)NMT_GAME_SETUP, NSS_PREGAME, (void*)&OnGameSetup, context); 653 session->AddTransition(NSS_PREGAME, (uint)NMT_ASSIGN_PLAYER, NSS_PREGAME, (void*)&OnAssignPlayer, context); 652 654 session->AddTransition(NSS_PREGAME, (uint)NMT_LOADED_GAME, NSS_INGAME, (void*)&OnLoadedGame, context); 653 655 654 656 session->AddTransition(NSS_JOIN_SYNCING, (uint)NMT_CONNECTION_LOST, NSS_UNCONNECTED, (void*)&OnDisconnect, context); … … 1111 1113 return true; 1112 1114 } 1113 1115 1116 bool CNetServerWorker::OnGameSetup(void* context, CFsmEvent* event) 1117 { 1118 ENSURE(event->GetType() == (uint)NMT_GAME_SETUP); 1119 1120 CNetServerSession* session = (CNetServerSession*)context; 1121 CNetServerWorker& server = session->GetServer(); 1122 1123 if (session->GetGUID() != server.m_HostGUID) // Client wasn't allowed to send new attributes 1124 return true; 1125 1126 CGameSetupMessage* message = (CGameSetupMessage*)event->GetParamRef(); 1127 1128 server.UpdateGameAttributes(&(message->m_Data)); 1129 return true; 1130 } 1131 1132 bool CNetServerWorker::OnAssignPlayer(void* context, CFsmEvent* event) 1133 { 1134 ENSURE(event->GetType() == (uint)NMT_ASSIGN_PLAYER); 1135 CNetServerSession* session = (CNetServerSession*)context; 1136 CNetServerWorker& server = session->GetServer(); 1137 1138 if (session->GetGUID() != server.m_HostGUID) // Client wasn't allowed to assign a player 1139 return true; 1140 1141 CAssignPlayerMessage* message = (CAssignPlayerMessage*)event->GetParamRef(); 1142 server.m_AssignPlayerQueue.emplace_back(message->m_PlayerID, message->m_GUIDToAssign); 1143 return true; 1144 } 1145 1114 1146 bool CNetServerWorker::OnLoadedGame(void* context, CFsmEvent* event) 1115 1147 { 1116 1148 ENSURE(event->GetType() == (uint)NMT_LOADED_GAME); -
source/network/NetServer.h
270 270 static bool OnInGame(void* context, CFsmEvent* event); 271 271 static bool OnChat(void* context, CFsmEvent* event); 272 272 static bool OnReady(void* context, CFsmEvent* event); 273 static bool OnGameSetup(void* context, CFsmEvent* event); 274 static bool OnAssignPlayer(void* context, CFsmEvent* event); 273 275 static bool OnLoadedGame(void* context, CFsmEvent* event); 274 276 static bool OnJoinSyncingLoadedGame(void* context, CFsmEvent* event); 275 277 static bool OnRejoined(void* context, CFsmEvent* event);