Skip to content

Commit 495e08c

Browse files
committed
fix: 修复 Lobby TCP API 与当前连接状态绑定失效问题
1 parent d241779 commit 495e08c

4 files changed

Lines changed: 24 additions & 5 deletions

File tree

OpenRA.Game/Game.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,8 @@ public static OrderManager JoinServer(ConnectionTarget endpoint, string password
118118
LobbyServer = new LobbyCommandServer(7446, OrderManager);
119119
LobbyServer.Start();
120120
}
121+
else
122+
LobbyServer.UpdateOrderManager(OrderManager);
121123

122124
return om;
123125
}

OpenRA.Game/LobbyCommandServer.cs

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ public class LobbyCommandServer
1515
{
1616
Socket serverSocket;
1717
readonly int port;
18-
readonly OrderManager orderManager;
18+
OrderManager orderManager;
1919
bool isRunning;
2020
public const string CurrentApiVersion = "1.0";
2121

@@ -82,6 +82,11 @@ public LobbyCommandServer(int port, OrderManager orderManager)
8282
this.orderManager = orderManager;
8383
}
8484

85+
public void UpdateOrderManager(OrderManager orderManager)
86+
{
87+
this.orderManager = orderManager;
88+
}
89+
8590
~LobbyCommandServer()
8691
{
8792
End();
@@ -291,11 +296,22 @@ async Task HandleClient(Socket clientSocket)
291296
if (request.Params == null)
292297
request.Params = new JObject();
293298

299+
var currentOrderManager = orderManager;
300+
if (currentOrderManager == null)
301+
{
302+
SendErrorResponse(clientSocket, new MCPError
303+
{
304+
Code = MCPErrorCodes.InternalError,
305+
Message = GetErrorMessage("INTERNAL_ERROR", language)
306+
}, request.RequestId, DebugMode);
307+
return;
308+
}
309+
294310
if (CommandHandlers.TryGetValue(request.Command, out var commandHandler))
295311
{
296312
try
297313
{
298-
var result = commandHandler?.Invoke(request.Params, orderManager);
314+
var result = commandHandler?.Invoke(request.Params, currentOrderManager);
299315
SendSuccessResponse(clientSocket, result, request.RequestId, null, DebugMode);
300316
}
301317
catch (Exception ex)
@@ -319,7 +335,7 @@ async Task HandleClient(Socket clientSocket)
319335
{
320336
try
321337
{
322-
var resultJson = queryHandler?.Invoke(request.Params, orderManager);
338+
var resultJson = queryHandler?.Invoke(request.Params, currentOrderManager);
323339
SendSuccessResponse(clientSocket, null, request.RequestId, resultJson, DebugMode);
324340
}
325341
catch (Exception ex)

OpenRA.Mods.Common/Widgets/Logic/Lobby/LobbyCommands.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ public static string SetSpawn(JObject json, OrderManager orderManager)
5858

5959
public static string SetSpectator(JObject json, OrderManager orderManager)
6060
{
61-
orderManager.IssueOrder(Order.Command("spectator"));
61+
orderManager.IssueOrder(Order.Command("spectate"));
6262
return "Spectator set order issued";
6363
}
6464

OpenRA.Mods.Common/Widgets/Logic/Lobby/LobbyLogic.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -168,12 +168,14 @@ internal LobbyLogic(Widget widget, ModData modData, WorldRenderer worldRenderer,
168168
if (Game.LobbyServer == null)
169169
{
170170
lobbyServer = new LobbyCommandServer(7446, orderManager);
171+
Game.LobbyServer = lobbyServer;
171172
LobbyCommands.Register(lobbyServer);
172173
lobbyServer.Start();
173174
}
174175
else
175176
{
176177
lobbyServer = Game.LobbyServer;
178+
lobbyServer.UpdateOrderManager(orderManager);
177179
LobbyCommands.Register(lobbyServer);
178180
}
179181

@@ -584,7 +586,6 @@ protected override void Dispose(bool disposing)
584586
if (disposing && !disposed)
585587
{
586588
disposed = true;
587-
lobbyServer?.End();
588589
Game.LobbyInfoChanged -= UpdateCurrentMap;
589590
Game.LobbyInfoChanged -= UpdatePlayerList;
590591
Game.LobbyInfoChanged -= UpdateDiscordStatus;

0 commit comments

Comments
 (0)