1 | Index: source/gui/scripting/ScriptFunctions.cpp
|
---|
2 | ===================================================================
|
---|
3 | --- source/gui/scripting/ScriptFunctions.cpp (revision 19356)
|
---|
4 | +++ source/gui/scripting/ScriptFunctions.cpp (working copy)
|
---|
5 | @@ -349,7 +349,7 @@
|
---|
6 | }
|
---|
7 |
|
---|
8 | g_Game = new CGame();
|
---|
9 | - g_NetClient = new CNetClient(g_Game, true);
|
---|
10 | + g_NetClient = new CNetClientWorker(g_Game, true);
|
---|
11 | g_NetClient->SetUserName(playerName);
|
---|
12 |
|
---|
13 | if (!g_NetClient->SetupConnection("127.0.0.1", serverPort))
|
---|
14 | @@ -367,7 +367,7 @@
|
---|
15 | ENSURE(!g_Game);
|
---|
16 |
|
---|
17 | g_Game = new CGame();
|
---|
18 | - g_NetClient = new CNetClient(g_Game, false);
|
---|
19 | + g_NetClient = new CNetClientWorker(g_Game, false);
|
---|
20 | g_NetClient->SetUserName(playerName);
|
---|
21 | if (!g_NetClient->SetupConnection(serverAddress, serverPort))
|
---|
22 | {
|
---|
23 | Index: source/network/NetClient.cpp
|
---|
24 | ===================================================================
|
---|
25 | --- source/network/NetClient.cpp (revision 19356)
|
---|
26 | +++ source/network/NetClient.cpp (working copy)
|
---|
27 | @@ -45,7 +45,7 @@
|
---|
28 | {
|
---|
29 | NONCOPYABLE(CNetFileReceiveTask_ClientRejoin);
|
---|
30 | public:
|
---|
31 | - CNetFileReceiveTask_ClientRejoin(CNetClient& client)
|
---|
32 | + CNetFileReceiveTask_ClientRejoin(CNetClientWorker& client)
|
---|
33 | : m_Client(client)
|
---|
34 | {
|
---|
35 | }
|
---|
36 | @@ -63,10 +63,10 @@
|
---|
37 | }
|
---|
38 |
|
---|
39 | private:
|
---|
40 | - CNetClient& m_Client;
|
---|
41 | + CNetClientWorker& m_Client;
|
---|
42 | };
|
---|
43 |
|
---|
44 | -CNetClient::CNetClient(CGame* game, bool isLocalClient) :
|
---|
45 | +CNetClientWorker::CNetClientWorker(CGame* game, bool isLocalClient) :
|
---|
46 | m_Session(NULL),
|
---|
47 | m_UserName(L"anonymous"),
|
---|
48 | m_GUID(ps_generate_guid()), m_HostID((u32)-1), m_ClientTurnManager(NULL), m_Game(game),
|
---|
49 | @@ -79,7 +79,7 @@
|
---|
50 |
|
---|
51 | void* context = this;
|
---|
52 |
|
---|
53 | - JS_AddExtraGCRootsTracer(GetScriptInterface().GetJSRuntime(), CNetClient::Trace, this);
|
---|
54 | + JS_AddExtraGCRootsTracer(GetScriptInterface().GetJSRuntime(), CNetClientWorker::Trace, this);
|
---|
55 |
|
---|
56 | // Set up transitions for session
|
---|
57 | AddTransition(NCS_UNCONNECTED, (uint)NMT_CONNECT_COMPLETE, NCS_CONNECT, (void*)&OnConnect, context);
|
---|
58 | @@ -139,13 +139,13 @@
|
---|
59 | SetFirstState(NCS_UNCONNECTED);
|
---|
60 | }
|
---|
61 |
|
---|
62 | -CNetClient::~CNetClient()
|
---|
63 | +CNetClientWorker::~CNetClientWorker()
|
---|
64 | {
|
---|
65 | DestroyConnection();
|
---|
66 | - JS_RemoveExtraGCRootsTracer(GetScriptInterface().GetJSRuntime(), CNetClient::Trace, this);
|
---|
67 | + JS_RemoveExtraGCRootsTracer(GetScriptInterface().GetJSRuntime(), CNetClientWorker::Trace, this);
|
---|
68 | }
|
---|
69 |
|
---|
70 | -void CNetClient::TraceMember(JSTracer *trc)
|
---|
71 | +void CNetClientWorker::TraceMember(JSTracer *trc)
|
---|
72 | {
|
---|
73 | for (JS::Heap<JS::Value>& guiMessage : m_GuiMessageQueue)
|
---|
74 | JS_CallValueTracer(trc, &guiMessage, "m_GuiMessageQueue");
|
---|
75 | @@ -158,7 +158,7 @@
|
---|
76 | m_UserName = username;
|
---|
77 | }
|
---|
78 |
|
---|
79 | -bool CNetClient::SetupConnection(const CStr& server, const u16 port)
|
---|
80 | +bool CNetClientWorker::SetupConnection(const CStr& server, const u16 port)
|
---|
81 | {
|
---|
82 | CNetClientSession* session = new CNetClientSession(*this);
|
---|
83 | bool ok = session->Connect(server, port, m_IsLocalClient);
|
---|
84 | @@ -166,13 +166,13 @@
|
---|
85 | return ok;
|
---|
86 | }
|
---|
87 |
|
---|
88 | -void CNetClient::SetAndOwnSession(CNetClientSession* session)
|
---|
89 | +void CNetClientWorker::SetAndOwnSession(CNetClientSession* session)
|
---|
90 | {
|
---|
91 | delete m_Session;
|
---|
92 | m_Session = session;
|
---|
93 | }
|
---|
94 |
|
---|
95 | -void CNetClient::DestroyConnection()
|
---|
96 | +void CNetClientWorker::DestroyConnection()
|
---|
97 | {
|
---|
98 | // Send network messages from the current frame before connection is destroyed.
|
---|
99 | if (m_ClientTurnManager)
|
---|
100 | @@ -183,7 +183,7 @@
|
---|
101 | SAFE_DELETE(m_Session);
|
---|
102 | }
|
---|
103 |
|
---|
104 | -void CNetClient::Poll()
|
---|
105 | +void CNetClientWorker::Poll()
|
---|
106 | {
|
---|
107 | if (!m_Session)
|
---|
108 | return;
|
---|
109 | @@ -192,7 +192,7 @@
|
---|
110 | m_Session->Poll();
|
---|
111 | }
|
---|
112 |
|
---|
113 | -void CNetClient::CheckServerConnection()
|
---|
114 | +void CNetClientWorker::CheckServerConnection()
|
---|
115 | {
|
---|
116 | // Trigger local warnings if the connection to the server is bad.
|
---|
117 | // At most once per second.
|
---|
118 | @@ -227,13 +227,13 @@
|
---|
119 | }
|
---|
120 | }
|
---|
121 |
|
---|
122 | -void CNetClient::Flush()
|
---|
123 | +void CNetClientWorker::Flush()
|
---|
124 | {
|
---|
125 | if (m_Session)
|
---|
126 | m_Session->Flush();
|
---|
127 | }
|
---|
128 |
|
---|
129 | -void CNetClient::GuiPoll(JS::MutableHandleValue ret)
|
---|
130 | +void CNetClientWorker::GuiPoll(JS::MutableHandleValue ret)
|
---|
131 | {
|
---|
132 | if (m_GuiMessageQueue.empty())
|
---|
133 | {
|
---|
134 | @@ -245,7 +245,7 @@
|
---|
135 | m_GuiMessageQueue.pop_front();
|
---|
136 | }
|
---|
137 |
|
---|
138 | -void CNetClient::PushGuiMessage(const JS::HandleValue message)
|
---|
139 | +void CNetClientWorker::PushGuiMessage(const JS::HandleValue message)
|
---|
140 | {
|
---|
141 | ENSURE(!message.isUndefined());
|
---|
142 |
|
---|
143 | @@ -252,7 +252,7 @@
|
---|
144 | m_GuiMessageQueue.push_back(JS::Heap<JS::Value>(message));
|
---|
145 | }
|
---|
146 |
|
---|
147 | -std::string CNetClient::TestReadGuiMessages()
|
---|
148 | +std::string CNetClientWorker::TestReadGuiMessages()
|
---|
149 | {
|
---|
150 | JSContext* cx = GetScriptInterface().GetContext();
|
---|
151 | JSAutoRequest rq(cx);
|
---|
152 | @@ -269,12 +269,12 @@
|
---|
153 | return r;
|
---|
154 | }
|
---|
155 |
|
---|
156 | -ScriptInterface& CNetClient::GetScriptInterface()
|
---|
157 | +ScriptInterface& CNetClientWorker::GetScriptInterface()
|
---|
158 | {
|
---|
159 | return m_Game->GetSimulation2()->GetScriptInterface();
|
---|
160 | }
|
---|
161 |
|
---|
162 | -void CNetClient::PostPlayerAssignmentsToScript()
|
---|
163 | +void CNetClientWorker::PostPlayerAssignmentsToScript()
|
---|
164 | {
|
---|
165 | JSContext* cx = GetScriptInterface().GetContext();
|
---|
166 | JSAutoRequest rq(cx);
|
---|
167 | @@ -298,7 +298,7 @@
|
---|
168 | PushGuiMessage(msg);
|
---|
169 | }
|
---|
170 |
|
---|
171 | -bool CNetClient::SendMessage(const CNetMessage* message)
|
---|
172 | +bool CNetClientWorker::SendMessage(const CNetMessage* message)
|
---|
173 | {
|
---|
174 | if (!m_Session)
|
---|
175 | return false;
|
---|
176 | @@ -306,12 +306,12 @@
|
---|
177 | return m_Session->SendMessage(message);
|
---|
178 | }
|
---|
179 |
|
---|
180 | -void CNetClient::HandleConnect()
|
---|
181 | +void CNetClientWorker::HandleConnect()
|
---|
182 | {
|
---|
183 | Update((uint)NMT_CONNECT_COMPLETE, NULL);
|
---|
184 | }
|
---|
185 |
|
---|
186 | -void CNetClient::HandleDisconnect(u32 reason)
|
---|
187 | +void CNetClientWorker::HandleDisconnect(u32 reason)
|
---|
188 | {
|
---|
189 | JSContext* cx = GetScriptInterface().GetContext();
|
---|
190 | JSAutoRequest rq(cx);
|
---|
191 | @@ -328,7 +328,7 @@
|
---|
192 | SetCurrState(NCS_UNCONNECTED);
|
---|
193 | }
|
---|
194 |
|
---|
195 | -void CNetClient::SendGameSetupMessage(JS::MutableHandleValue attrs, ScriptInterface& scriptInterface)
|
---|
196 | +void CNetClientWorker::SendGameSetupMessage(JS::MutableHandleValue attrs, ScriptInterface& scriptInterface)
|
---|
197 | {
|
---|
198 | CGameSetupMessage gameSetup(scriptInterface);
|
---|
199 | gameSetup.m_Data = attrs;
|
---|
200 | @@ -335,7 +335,7 @@
|
---|
201 | SendMessage(&gameSetup);
|
---|
202 | }
|
---|
203 |
|
---|
204 | -void CNetClient::SendAssignPlayerMessage(const int playerID, const CStr& guid)
|
---|
205 | +void CNetClientWorker::SendAssignPlayerMessage(const int playerID, const CStr& guid)
|
---|
206 | {
|
---|
207 | CAssignPlayerMessage assignPlayer;
|
---|
208 | assignPlayer.m_PlayerID = playerID;
|
---|
209 | @@ -343,7 +343,7 @@
|
---|
210 | SendMessage(&assignPlayer);
|
---|
211 | }
|
---|
212 |
|
---|
213 | -void CNetClient::SendChatMessage(const std::wstring& text)
|
---|
214 | +void CNetClientWorker::SendChatMessage(const std::wstring& text)
|
---|
215 | {
|
---|
216 | CChatMessage chat;
|
---|
217 | chat.m_Message = text;
|
---|
218 | @@ -350,7 +350,7 @@
|
---|
219 | SendMessage(&chat);
|
---|
220 | }
|
---|
221 |
|
---|
222 | -void CNetClient::SendReadyMessage(const int status)
|
---|
223 | +void CNetClientWorker::SendReadyMessage(const int status)
|
---|
224 | {
|
---|
225 | CReadyMessage readyStatus;
|
---|
226 | readyStatus.m_Status = status;
|
---|
227 | @@ -357,25 +357,25 @@
|
---|
228 | SendMessage(&readyStatus);
|
---|
229 | }
|
---|
230 |
|
---|
231 | -void CNetClient::SendClearAllReadyMessage()
|
---|
232 | +void CNetClientWorker::SendClearAllReadyMessage()
|
---|
233 | {
|
---|
234 | CClearAllReadyMessage clearAllReady;
|
---|
235 | SendMessage(&clearAllReady);
|
---|
236 | }
|
---|
237 |
|
---|
238 | -void CNetClient::SendStartGameMessage()
|
---|
239 | +void CNetClientWorker::SendStartGameMessage()
|
---|
240 | {
|
---|
241 | CGameStartMessage gameStart;
|
---|
242 | SendMessage(&gameStart);
|
---|
243 | }
|
---|
244 |
|
---|
245 | -void CNetClient::SendRejoinedMessage()
|
---|
246 | +void CNetClientWorker::SendRejoinedMessage()
|
---|
247 | {
|
---|
248 | CRejoinedMessage rejoinedMessage;
|
---|
249 | SendMessage(&rejoinedMessage);
|
---|
250 | }
|
---|
251 |
|
---|
252 | -void CNetClient::SendKickPlayerMessage(const CStrW& playerName, bool ban)
|
---|
253 | +void CNetClientWorker::SendKickPlayerMessage(const CStrW& playerName, bool ban)
|
---|
254 | {
|
---|
255 | CKickedMessage kickPlayer;
|
---|
256 | kickPlayer.m_Name = playerName;
|
---|
257 | @@ -383,7 +383,7 @@
|
---|
258 | SendMessage(&kickPlayer);
|
---|
259 | }
|
---|
260 |
|
---|
261 | -void CNetClient::SendPausedMessage(bool pause)
|
---|
262 | +void CNetClientWorker::SendPausedMessage(bool pause)
|
---|
263 | {
|
---|
264 | CClientPausedMessage pausedMessage;
|
---|
265 | pausedMessage.m_Pause = pause;
|
---|
266 | @@ -390,7 +390,7 @@
|
---|
267 | SendMessage(&pausedMessage);
|
---|
268 | }
|
---|
269 |
|
---|
270 | -bool CNetClient::HandleMessage(CNetMessage* message)
|
---|
271 | +bool CNetClientWorker::HandleMessage(CNetMessage* message)
|
---|
272 | {
|
---|
273 | // Handle non-FSM messages first
|
---|
274 |
|
---|
275 | @@ -433,7 +433,7 @@
|
---|
276 | return ok;
|
---|
277 | }
|
---|
278 |
|
---|
279 | -void CNetClient::LoadFinished()
|
---|
280 | +void CNetClientWorker::LoadFinished()
|
---|
281 | {
|
---|
282 | JSContext* cx = GetScriptInterface().GetContext();
|
---|
283 | JSAutoRequest rq(cx);
|
---|
284 | @@ -476,11 +476,11 @@
|
---|
285 | SendMessage(&loaded);
|
---|
286 | }
|
---|
287 |
|
---|
288 | -bool CNetClient::OnConnect(void* context, CFsmEvent* event)
|
---|
289 | +bool CNetClientWorker::OnConnect(void* context, CFsmEvent* event)
|
---|
290 | {
|
---|
291 | ENSURE(event->GetType() == (uint)NMT_CONNECT_COMPLETE);
|
---|
292 |
|
---|
293 | - CNetClient* client = (CNetClient*)context;
|
---|
294 | + CNetClientWorker* client = (CNetClientWorker*)context;
|
---|
295 |
|
---|
296 | JSContext* cx = client->GetScriptInterface().GetContext();
|
---|
297 | JSAutoRequest rq(cx);
|
---|
298 | @@ -492,11 +492,11 @@
|
---|
299 | return true;
|
---|
300 | }
|
---|
301 |
|
---|
302 | -bool CNetClient::OnHandshake(void* context, CFsmEvent* event)
|
---|
303 | +bool CNetClientWorker::OnHandshake(void* context, CFsmEvent* event)
|
---|
304 | {
|
---|
305 | ENSURE(event->GetType() == (uint)NMT_SERVER_HANDSHAKE);
|
---|
306 |
|
---|
307 | - CNetClient* client = (CNetClient*)context;
|
---|
308 | + CNetClientWorker* client = (CNetClientWorker*)context;
|
---|
309 |
|
---|
310 | CCliHandshakeMessage handshake;
|
---|
311 | handshake.m_MagicResponse = PS_PROTOCOL_MAGIC_RESPONSE;
|
---|
312 | @@ -507,11 +507,11 @@
|
---|
313 | return true;
|
---|
314 | }
|
---|
315 |
|
---|
316 | -bool CNetClient::OnHandshakeResponse(void* context, CFsmEvent* event)
|
---|
317 | +bool CNetClientWorker::OnHandshakeResponse(void* context, CFsmEvent* event)
|
---|
318 | {
|
---|
319 | ENSURE(event->GetType() == (uint)NMT_SERVER_HANDSHAKE_RESPONSE);
|
---|
320 |
|
---|
321 | - CNetClient* client = (CNetClient*)context;
|
---|
322 | + CNetClientWorker* client = (CNetClientWorker*)context;
|
---|
323 |
|
---|
324 | CAuthenticateMessage authenticate;
|
---|
325 | authenticate.m_GUID = client->m_GUID;
|
---|
326 | @@ -523,11 +523,11 @@
|
---|
327 | return true;
|
---|
328 | }
|
---|
329 |
|
---|
330 | -bool CNetClient::OnAuthenticate(void* context, CFsmEvent* event)
|
---|
331 | +bool CNetClientWorker::OnAuthenticate(void* context, CFsmEvent* event)
|
---|
332 | {
|
---|
333 | ENSURE(event->GetType() == (uint)NMT_AUTHENTICATE_RESULT);
|
---|
334 |
|
---|
335 | - CNetClient* client = (CNetClient*)context;
|
---|
336 | + CNetClientWorker* client = (CNetClientWorker*)context;
|
---|
337 |
|
---|
338 | JSContext* cx = client->GetScriptInterface().GetContext();
|
---|
339 | JSAutoRequest rq(cx);
|
---|
340 | @@ -547,11 +547,11 @@
|
---|
341 | return true;
|
---|
342 | }
|
---|
343 |
|
---|
344 | -bool CNetClient::OnChat(void* context, CFsmEvent* event)
|
---|
345 | +bool CNetClientWorker::OnChat(void* context, CFsmEvent* event)
|
---|
346 | {
|
---|
347 | ENSURE(event->GetType() == (uint)NMT_CHAT);
|
---|
348 |
|
---|
349 | - CNetClient* client = (CNetClient*)context;
|
---|
350 | + CNetClientWorker* client = (CNetClientWorker*)context;
|
---|
351 | JSContext* cx = client->GetScriptInterface().GetContext();
|
---|
352 | JSAutoRequest rq(cx);
|
---|
353 |
|
---|
354 | @@ -566,11 +566,11 @@
|
---|
355 | return true;
|
---|
356 | }
|
---|
357 |
|
---|
358 | -bool CNetClient::OnReady(void* context, CFsmEvent* event)
|
---|
359 | +bool CNetClientWorker::OnReady(void* context, CFsmEvent* event)
|
---|
360 | {
|
---|
361 | ENSURE(event->GetType() == (uint)NMT_READY);
|
---|
362 |
|
---|
363 | - CNetClient* client = (CNetClient*)context;
|
---|
364 | + CNetClientWorker* client = (CNetClientWorker*)context;
|
---|
365 | JSContext* cx = client->GetScriptInterface().GetContext();
|
---|
366 | JSAutoRequest rq(cx);
|
---|
367 |
|
---|
368 | @@ -585,11 +585,11 @@
|
---|
369 | return true;
|
---|
370 | }
|
---|
371 |
|
---|
372 | -bool CNetClient::OnGameSetup(void* context, CFsmEvent* event)
|
---|
373 | +bool CNetClientWorker::OnGameSetup(void* context, CFsmEvent* event)
|
---|
374 | {
|
---|
375 | ENSURE(event->GetType() == (uint)NMT_GAME_SETUP);
|
---|
376 |
|
---|
377 | - CNetClient* client = (CNetClient*)context;
|
---|
378 | + CNetClientWorker* client = (CNetClientWorker*)context;
|
---|
379 | JSContext* cx = client->GetScriptInterface().GetContext();
|
---|
380 | JSAutoRequest rq(cx);
|
---|
381 |
|
---|
382 | @@ -605,11 +605,11 @@
|
---|
383 | return true;
|
---|
384 | }
|
---|
385 |
|
---|
386 | -bool CNetClient::OnPlayerAssignment(void* context, CFsmEvent* event)
|
---|
387 | +bool CNetClientWorker::OnPlayerAssignment(void* context, CFsmEvent* event)
|
---|
388 | {
|
---|
389 | ENSURE(event->GetType() == (uint)NMT_PLAYER_ASSIGNMENT);
|
---|
390 |
|
---|
391 | - CNetClient* client = (CNetClient*)context;
|
---|
392 | + CNetClientWorker* client = (CNetClientWorker*)context;
|
---|
393 |
|
---|
394 | CPlayerAssignmentMessage* message = (CPlayerAssignmentMessage*)event->GetParamRef();
|
---|
395 |
|
---|
396 | @@ -632,11 +632,11 @@
|
---|
397 | return true;
|
---|
398 | }
|
---|
399 |
|
---|
400 | -bool CNetClient::OnGameStart(void* context, CFsmEvent* event)
|
---|
401 | +bool CNetClientWorker::OnGameStart(void* context, CFsmEvent* event)
|
---|
402 | {
|
---|
403 | ENSURE(event->GetType() == (uint)NMT_GAME_START);
|
---|
404 |
|
---|
405 | - CNetClient* client = (CNetClient*)context;
|
---|
406 | + CNetClientWorker* client = (CNetClientWorker*)context;
|
---|
407 | JSContext* cx = client->GetScriptInterface().GetContext();
|
---|
408 | JSAutoRequest rq(cx);
|
---|
409 |
|
---|
410 | @@ -658,11 +658,11 @@
|
---|
411 | return true;
|
---|
412 | }
|
---|
413 |
|
---|
414 | -bool CNetClient::OnJoinSyncStart(void* context, CFsmEvent* event)
|
---|
415 | +bool CNetClientWorker::OnJoinSyncStart(void* context, CFsmEvent* event)
|
---|
416 | {
|
---|
417 | ENSURE(event->GetType() == (uint)NMT_JOIN_SYNC_START);
|
---|
418 |
|
---|
419 | - CNetClient* client = (CNetClient*)context;
|
---|
420 | + CNetClientWorker* client = (CNetClientWorker*)context;
|
---|
421 |
|
---|
422 | // The server wants us to start downloading the game state from it, so do so
|
---|
423 | client->m_Session->GetFileTransferer().StartTask(
|
---|
424 | @@ -672,11 +672,11 @@
|
---|
425 | return true;
|
---|
426 | }
|
---|
427 |
|
---|
428 | -bool CNetClient::OnJoinSyncEndCommandBatch(void* context, CFsmEvent* event)
|
---|
429 | +bool CNetClientWorker::OnJoinSyncEndCommandBatch(void* context, CFsmEvent* event)
|
---|
430 | {
|
---|
431 | ENSURE(event->GetType() == (uint)NMT_END_COMMAND_BATCH);
|
---|
432 |
|
---|
433 | - CNetClient* client = (CNetClient*)context;
|
---|
434 | + CNetClientWorker* client = (CNetClientWorker*)context;
|
---|
435 |
|
---|
436 | CEndCommandBatchMessage* endMessage = (CEndCommandBatchMessage*)event->GetParamRef();
|
---|
437 |
|
---|
438 | @@ -688,11 +688,11 @@
|
---|
439 | return true;
|
---|
440 | }
|
---|
441 |
|
---|
442 | -bool CNetClient::OnRejoined(void* context, CFsmEvent* event)
|
---|
443 | +bool CNetClientWorker::OnRejoined(void* context, CFsmEvent* event)
|
---|
444 | {
|
---|
445 | ENSURE(event->GetType() == (uint)NMT_REJOINED);
|
---|
446 |
|
---|
447 | - CNetClient* client = (CNetClient*)context;
|
---|
448 | + CNetClientWorker* client = (CNetClientWorker*)context;
|
---|
449 | JSContext* cx = client->GetScriptInterface().GetContext();
|
---|
450 | JSAutoRequest rq(cx);
|
---|
451 |
|
---|
452 | @@ -705,11 +705,11 @@
|
---|
453 | return true;
|
---|
454 | }
|
---|
455 |
|
---|
456 | -bool CNetClient::OnKicked(void *context, CFsmEvent* event)
|
---|
457 | +bool CNetClientWorker::OnKicked(void *context, CFsmEvent* event)
|
---|
458 | {
|
---|
459 | ENSURE(event->GetType() == (uint)NMT_KICKED);
|
---|
460 |
|
---|
461 | - CNetClient* client = (CNetClient*)context;
|
---|
462 | + CNetClientWorker* client = (CNetClientWorker*)context;
|
---|
463 | JSContext* cx = client->GetScriptInterface().GetContext();
|
---|
464 | JSAutoRequest rq(cx);
|
---|
465 |
|
---|
466 | @@ -725,13 +725,13 @@
|
---|
467 | return true;
|
---|
468 | }
|
---|
469 |
|
---|
470 | -bool CNetClient::OnClientTimeout(void *context, CFsmEvent* event)
|
---|
471 | +bool CNetClientWorker::OnClientTimeout(void *context, CFsmEvent* event)
|
---|
472 | {
|
---|
473 | // Report the timeout of some other client
|
---|
474 |
|
---|
475 | ENSURE(event->GetType() == (uint)NMT_CLIENT_TIMEOUT);
|
---|
476 |
|
---|
477 | - CNetClient* client = (CNetClient*)context;
|
---|
478 | + CNetClientWorker* client = (CNetClientWorker*)context;
|
---|
479 | JSContext* cx = client->GetScriptInterface().GetContext();
|
---|
480 | JSAutoRequest rq(cx);
|
---|
481 |
|
---|
482 | @@ -749,13 +749,13 @@
|
---|
483 | return true;
|
---|
484 | }
|
---|
485 |
|
---|
486 | -bool CNetClient::OnClientPerformance(void *context, CFsmEvent* event)
|
---|
487 | +bool CNetClientWorker::OnClientPerformance(void *context, CFsmEvent* event)
|
---|
488 | {
|
---|
489 | // Performance statistics for one or multiple clients
|
---|
490 |
|
---|
491 | ENSURE(event->GetType() == (uint)NMT_CLIENT_PERFORMANCE);
|
---|
492 |
|
---|
493 | - CNetClient* client = (CNetClient*)context;
|
---|
494 | + CNetClientWorker* client = (CNetClientWorker*)context;
|
---|
495 | JSContext* cx = client->GetScriptInterface().GetContext();
|
---|
496 | JSAutoRequest rq(cx);
|
---|
497 |
|
---|
498 | @@ -780,7 +780,7 @@
|
---|
499 | return true;
|
---|
500 | }
|
---|
501 |
|
---|
502 | -bool CNetClient::OnClientsLoading(void *context, CFsmEvent *event)
|
---|
503 | +bool CNetClientWorker::OnClientsLoading(void *context, CFsmEvent *event)
|
---|
504 | {
|
---|
505 | ENSURE(event->GetType() == (uint)NMT_CLIENTS_LOADING);
|
---|
506 |
|
---|
507 | @@ -791,7 +791,7 @@
|
---|
508 | for (const CClientsLoadingMessage::S_m_Clients& client : message->m_Clients)
|
---|
509 | guids.push_back(client.m_GUID);
|
---|
510 |
|
---|
511 | - CNetClient* client = (CNetClient*)context;
|
---|
512 | + CNetClientWorker* client = (CNetClientWorker*)context;
|
---|
513 | JSContext* cx = client->GetScriptInterface().GetContext();
|
---|
514 | JSAutoRequest rq(cx);
|
---|
515 |
|
---|
516 | @@ -802,11 +802,11 @@
|
---|
517 | return true;
|
---|
518 | }
|
---|
519 |
|
---|
520 | -bool CNetClient::OnClientPaused(void *context, CFsmEvent *event)
|
---|
521 | +bool CNetClientWorker::OnClientPaused(void *context, CFsmEvent *event)
|
---|
522 | {
|
---|
523 | ENSURE(event->GetType() == (uint)NMT_CLIENT_PAUSED);
|
---|
524 |
|
---|
525 | - CNetClient* client = (CNetClient*)context;
|
---|
526 | + CNetClientWorker* client = (CNetClientWorker*)context;
|
---|
527 | JSContext* cx = client->GetScriptInterface().GetContext();
|
---|
528 | JSAutoRequest rq(cx);
|
---|
529 |
|
---|
530 | @@ -821,11 +821,11 @@
|
---|
531 | return true;
|
---|
532 | }
|
---|
533 |
|
---|
534 | -bool CNetClient::OnLoadedGame(void* context, CFsmEvent* event)
|
---|
535 | +bool CNetClientWorker::OnLoadedGame(void* context, CFsmEvent* event)
|
---|
536 | {
|
---|
537 | ENSURE(event->GetType() == (uint)NMT_LOADED_GAME);
|
---|
538 |
|
---|
539 | - CNetClient* client = (CNetClient*)context;
|
---|
540 | + CNetClientWorker* client = (CNetClientWorker*)context;
|
---|
541 | JSContext* cx = client->GetScriptInterface().GetContext();
|
---|
542 | JSAutoRequest rq(cx);
|
---|
543 |
|
---|
544 | @@ -844,11 +844,11 @@
|
---|
545 | return true;
|
---|
546 | }
|
---|
547 |
|
---|
548 | -bool CNetClient::OnInGame(void *context, CFsmEvent* event)
|
---|
549 | +bool CNetClientWorker::OnInGame(void *context, CFsmEvent* event)
|
---|
550 | {
|
---|
551 | // TODO: should split each of these cases into a separate method
|
---|
552 |
|
---|
553 | - CNetClient* client = (CNetClient*)context;
|
---|
554 | + CNetClientWorker* client = (CNetClientWorker*)context;
|
---|
555 |
|
---|
556 | CNetMessage* message = (CNetMessage*)event->GetParamRef();
|
---|
557 | if (message)
|
---|
558 | Index: source/network/NetClient.h
|
---|
559 | ===================================================================
|
---|
560 | --- source/network/NetClient.h (revision 19356)
|
---|
561 | +++ source/network/NetClient.h (working copy)
|
---|
562 | @@ -23,6 +23,7 @@
|
---|
563 | #include "network/NetHost.h"
|
---|
564 | #include "scriptinterface/ScriptVal.h"
|
---|
565 |
|
---|
566 | +#include "ps/ThreadUtil.h"
|
---|
567 | #include "ps/CStr.h"
|
---|
568 |
|
---|
569 | #include <deque>
|
---|
570 | @@ -33,6 +34,8 @@
|
---|
571 | class CNetServer;
|
---|
572 | class ScriptInterface;
|
---|
573 |
|
---|
574 | +class CNetClientWorker;
|
---|
575 | +
|
---|
576 | // NetClient session FSM states
|
---|
577 | enum
|
---|
578 | {
|
---|
579 | @@ -54,14 +57,12 @@
|
---|
580 | * It provides an interface between the GUI, the network (via CNetClientSession),
|
---|
581 | * and the game (via CGame and CNetClientTurnManager).
|
---|
582 | */
|
---|
583 | -class CNetClient : public CFsm
|
---|
584 | +class CNetClient
|
---|
585 | {
|
---|
586 | NONCOPYABLE(CNetClient);
|
---|
587 |
|
---|
588 | - friend class CNetFileReceiveTask_ClientRejoin;
|
---|
589 | -
|
---|
590 | public:
|
---|
591 | - /**
|
---|
592 | + /**
|
---|
593 | * Construct a client associated with the given game object.
|
---|
594 | * The game must exist for the lifetime of this object.
|
---|
595 | */
|
---|
596 | @@ -70,6 +71,35 @@
|
---|
597 | virtual ~CNetClient();
|
---|
598 |
|
---|
599 | /**
|
---|
600 | + * Set the user's name that will be displayed to all players.
|
---|
601 | + * This must not be called after the connection setup.
|
---|
602 | + */
|
---|
603 | + void SetUserName(const CStrW& username);
|
---|
604 | +
|
---|
605 | + /**
|
---|
606 | + * Set up a connection to the remote networked server.
|
---|
607 | + * @param server IP address or host name to connect to
|
---|
608 | + * @return true on success, false on connection failure
|
---|
609 | + */
|
---|
610 | + bool SetupConnection(const CStr& server, const u16 port);
|
---|
611 | +
|
---|
612 | + private:
|
---|
613 | + CNetClientWorker* m_Worker;
|
---|
614 | +};
|
---|
615 | +
|
---|
616 | +/**
|
---|
617 | + * Network server worker thread.
|
---|
618 | + *
|
---|
619 | + * Thread-safety:
|
---|
620 | + *
|
---|
621 | + *
|
---|
622 | + */
|
---|
623 | +class CNetClientWorker
|
---|
624 | +{
|
---|
625 | + NONCOPYABLE(CNetClientWorker);
|
---|
626 | +
|
---|
627 | +public:
|
---|
628 | + /**
|
---|
629 | * We assume that adding a tracing function that's only called
|
---|
630 | * during GC is better for performance than using a
|
---|
631 | * PersistentRooted<T> where each value needs to be added to
|
---|
632 | @@ -77,18 +107,12 @@
|
---|
633 | */
|
---|
634 | static void Trace(JSTracer *trc, void *data)
|
---|
635 | {
|
---|
636 | - reinterpret_cast<CNetClient*>(data)->TraceMember(trc);
|
---|
637 | + reinterpret_cast<CNetClientWorker*>(data)->TraceMember(trc);
|
---|
638 | }
|
---|
639 |
|
---|
640 | void TraceMember(JSTracer *trc);
|
---|
641 |
|
---|
642 | /**
|
---|
643 | - * Set the user's name that will be displayed to all players.
|
---|
644 | - * This must not be called after the connection setup.
|
---|
645 | - */
|
---|
646 | - void SetUserName(const CStrW& username);
|
---|
647 | -
|
---|
648 | - /**
|
---|
649 | * Returns the GUID of the local client.
|
---|
650 | * Used for distinguishing observers.
|
---|
651 | */
|
---|
652 | @@ -95,13 +119,6 @@
|
---|
653 | CStr GetGUID() const { return m_GUID; }
|
---|
654 |
|
---|
655 | /**
|
---|
656 | - * Set up a connection to the remote networked server.
|
---|
657 | - * @param server IP address or host name to connect to
|
---|
658 | - * @return true on success, false on connection failure
|
---|
659 | - */
|
---|
660 | - bool SetupConnection(const CStr& server, const u16 port);
|
---|
661 | -
|
---|
662 | - /**
|
---|
663 | * Destroy the connection to the server.
|
---|
664 | * This client probably cannot be used again.
|
---|
665 | */
|
---|
666 | @@ -216,6 +233,19 @@
|
---|
667 | void SendPausedMessage(bool pause);
|
---|
668 |
|
---|
669 | private:
|
---|
670 | + friend class CNetClient;
|
---|
671 | + friend class CNetFileReceiveTask_ClientRejoin;
|
---|
672 | +
|
---|
673 | + CNetClientWorker(CGame* game, bool isLocalClient);
|
---|
674 | + ~CNetClientWorker();
|
---|
675 | +
|
---|
676 | + /**
|
---|
677 | + * Set up a connection to the remote networked server.
|
---|
678 | + * @param server IP address or host name to connect to
|
---|
679 | + * @return true on success, false on connection failure
|
---|
680 | + */
|
---|
681 | + bool SetupConnection(const CStr& server, const u16 port);
|
---|
682 | +
|
---|
683 | // Net message / FSM transition handlers
|
---|
684 | static bool OnConnect(void* context, CFsmEvent* event);
|
---|
685 | static bool OnHandshake(void* context, CFsmEvent* event);
|
---|
686 | Index: source/network/NetClientTurnManager.cpp
|
---|
687 | ===================================================================
|
---|
688 | --- source/network/NetClientTurnManager.cpp (revision 19356)
|
---|
689 | +++ source/network/NetClientTurnManager.cpp (working copy)
|
---|
690 | @@ -33,7 +33,7 @@
|
---|
691 | #define NETCLIENTTURN_LOG(...)
|
---|
692 | #endif
|
---|
693 |
|
---|
694 | -CNetClientTurnManager::CNetClientTurnManager(CSimulation2& simulation, CNetClient& client, int clientId, IReplayLogger& replay)
|
---|
695 | +CNetClientTurnManager::CNetClientTurnManager(CSimulation2& simulation, CNetClientWorker& client, int clientId, IReplayLogger& replay)
|
---|
696 | : CTurnManager(simulation, DEFAULT_TURN_LENGTH_MP, clientId, replay), m_NetClient(client)
|
---|
697 | {
|
---|
698 | }
|
---|
699 | Index: source/network/NetClientTurnManager.h
|
---|
700 | ===================================================================
|
---|
701 | --- source/network/NetClientTurnManager.h (revision 19356)
|
---|
702 | +++ source/network/NetClientTurnManager.h (working copy)
|
---|
703 | @@ -21,7 +21,7 @@
|
---|
704 | #include "simulation2/system/TurnManager.h"
|
---|
705 | #include "NetMessage.h"
|
---|
706 |
|
---|
707 | -class CNetClient;
|
---|
708 | +class CNetClientWorker;
|
---|
709 |
|
---|
710 | /**
|
---|
711 | * Implementation of CTurnManager for network clients.
|
---|
712 | @@ -30,7 +30,7 @@
|
---|
713 | {
|
---|
714 | NONCOPYABLE(CNetClientTurnManager);
|
---|
715 | public:
|
---|
716 | - CNetClientTurnManager(CSimulation2& simulation, CNetClient& client, int clientId, IReplayLogger& replay);
|
---|
717 | + CNetClientTurnManager(CSimulation2& simulation, CNetClientWorker& client, int clientId, IReplayLogger& replay);
|
---|
718 |
|
---|
719 | void OnSimulationMessage(CSimulationMessage* msg) override;
|
---|
720 |
|
---|
721 | @@ -48,7 +48,7 @@
|
---|
722 |
|
---|
723 | void NotifyFinishedUpdate(u32 turn) override;
|
---|
724 |
|
---|
725 | - CNetClient& m_NetClient;
|
---|
726 | + CNetClientWorker& m_NetClient;
|
---|
727 | };
|
---|
728 |
|
---|
729 | #endif // INCLUDED_NETCLIENTTURNMANAGER
|
---|
730 | Index: source/network/NetSession.cpp
|
---|
731 | ===================================================================
|
---|
732 | --- source/network/NetSession.cpp (revision 19356)
|
---|
733 | +++ source/network/NetSession.cpp (working copy)
|
---|
734 | @@ -32,7 +32,7 @@
|
---|
735 |
|
---|
736 | static const int CHANNEL_COUNT = 1;
|
---|
737 |
|
---|
738 | -CNetClientSession::CNetClientSession(CNetClient& client) :
|
---|
739 | +CNetClientSession::CNetClientSession(CNetClientWorker& client) :
|
---|
740 | m_Client(client), m_FileTransferer(this), m_Host(NULL), m_Server(NULL), m_Stats(NULL)
|
---|
741 | {
|
---|
742 | }
|
---|
743 | Index: source/network/NetSession.h
|
---|
744 | ===================================================================
|
---|
745 | --- source/network/NetSession.h (revision 19356)
|
---|
746 | +++ source/network/NetSession.h (working copy)
|
---|
747 | @@ -34,7 +34,7 @@
|
---|
748 | */
|
---|
749 | extern const u32 MAXIMUM_HOST_TIMEOUT;
|
---|
750 |
|
---|
751 | -class CNetClient;
|
---|
752 | +class CNetClientWorker;
|
---|
753 | class CNetServerWorker;
|
---|
754 |
|
---|
755 | class CNetStatsTable;
|
---|
756 | @@ -67,7 +67,7 @@
|
---|
757 | NONCOPYABLE(CNetClientSession);
|
---|
758 |
|
---|
759 | public:
|
---|
760 | - CNetClientSession(CNetClient& client);
|
---|
761 | + CNetClientSession(CNetClientWorker& client);
|
---|
762 | ~CNetClientSession();
|
---|
763 |
|
---|
764 | bool Connect(const CStr& server, const u16 port, const bool isLocalClient);
|
---|
765 | @@ -106,7 +106,7 @@
|
---|
766 | CNetFileTransferer& GetFileTransferer() { return m_FileTransferer; }
|
---|
767 |
|
---|
768 | private:
|
---|
769 | - CNetClient& m_Client;
|
---|
770 | + CNetClientWorker& m_Client;
|
---|
771 |
|
---|
772 | CNetFileTransferer m_FileTransferer;
|
---|
773 |
|
---|
774 | Index: source/ps/GameSetup/GameSetup.cpp
|
---|
775 | ===================================================================
|
---|
776 | --- source/ps/GameSetup/GameSetup.cpp (revision 19356)
|
---|
777 | +++ source/ps/GameSetup/GameSetup.cpp (working copy)
|
---|
778 | @@ -1498,7 +1498,7 @@
|
---|
779 | bool ok = g_NetServer->SetupConnection(PS_DEFAULT_PORT);
|
---|
780 | ENSURE(ok);
|
---|
781 |
|
---|
782 | - g_NetClient = new CNetClient(g_Game, true);
|
---|
783 | + g_NetClient = new CNetClientWorker(g_Game, true);
|
---|
784 | g_NetClient->SetUserName(userName);
|
---|
785 | g_NetClient->SetupConnection("127.0.0.1", PS_DEFAULT_PORT);
|
---|
786 | }
|
---|
787 | @@ -1506,7 +1506,7 @@
|
---|
788 | {
|
---|
789 | InitPs(true, L"page_loading.xml", &scriptInterface, mpInitData);
|
---|
790 |
|
---|
791 | - g_NetClient = new CNetClient(g_Game, false);
|
---|
792 | + g_NetClient = new CNetClientWorker(g_Game, false);
|
---|
793 | g_NetClient->SetUserName(userName);
|
---|
794 |
|
---|
795 | CStr ip = args.Get("autostart-client");
|
---|