From b4f7d71ee785ebc5d62ceb2b81ea30c8ec876dd4 Mon Sep 17 00:00:00 2001 From: Acruid Date: Tue, 9 Feb 2021 04:16:15 -0800 Subject: [PATCH] Server console can forward commands to a client. --- Robust.Client/Console/ClientConsoleHost.cs | 16 ++++++++++++---- Robust.Server/Console/ServerConsoleHost.cs | 9 +++++++-- 2 files changed, 19 insertions(+), 6 deletions(-) diff --git a/Robust.Client/Console/ClientConsoleHost.cs b/Robust.Client/Console/ClientConsoleHost.cs index de988aec9..5ff04070e 100644 --- a/Robust.Client/Console/ClientConsoleHost.cs +++ b/Robust.Client/Console/ClientConsoleHost.cs @@ -36,7 +36,7 @@ namespace Robust.Client.Console Message = message; } } - + /// internal class ClientConsoleHost : ConsoleHost, IClientConsoleHost { @@ -47,12 +47,20 @@ namespace Robust.Client.Console { NetManager.RegisterNetMessage(MsgConCmdReg.NAME, HandleConCmdReg); NetManager.RegisterNetMessage(MsgConCmdAck.NAME, HandleConCmdAck); - NetManager.RegisterNetMessage(MsgConCmd.NAME); + NetManager.RegisterNetMessage(MsgConCmd.NAME, ProcessCommand); Reset(); LogManager.RootSawmill.AddHandler(new DebugConsoleLogHandler(this)); } + private void ProcessCommand(MsgConCmd message) + { + string? text = message.Text; + LogManager.GetSawmill(SawmillName).Info($"SERVER:{text}"); + + ExecuteCommand(null, text); + } + /// public void Reset() { @@ -104,14 +112,14 @@ namespace Robust.Client.Console args.RemoveAt(0); command1.Execute(new ConsoleShell(this, null), command, args.ToArray()); } - else if (!NetManager.IsConnected) + else WriteError(null, "Unknown command: " + commandName); } /// public override void RemoteExecuteCommand(ICommonSession? session, string command) { - if (!NetManager.IsConnected) + if (!NetManager.IsConnected) // we don't care about session on client return; var msg = NetManager.CreateNetMessage(); diff --git a/Robust.Server/Console/ServerConsoleHost.cs b/Robust.Server/Console/ServerConsoleHost.cs index 70abc7ad7..62681fbc0 100644 --- a/Robust.Server/Console/ServerConsoleHost.cs +++ b/Robust.Server/Console/ServerConsoleHost.cs @@ -28,7 +28,12 @@ namespace Robust.Server.Console /// public override void RemoteExecuteCommand(ICommonSession? session, string command) { - //TODO: Server -> Client remote execute, just like how the client forwards the command + if (!NetManager.IsConnected || session is null) + return; + + var msg = NetManager.CreateNetMessage(); + msg.Text = command; + NetManager.ServerSendMessage(msg, ((IPlayerSession)session).ConnectedClient); } /// @@ -61,7 +66,7 @@ namespace Robust.Server.Console var sudoShell = new SudoShell(this, localShell, shell); ExecuteInShell(sudoShell, $"{command} {string.Join(' ', cArgs)}"); }); - + LoadConsoleCommands(); // setup networking with clients