source: binary-improvements/7dtd-server-fixes/src/ConsoleOutputSeparator.cs@ 131

Last change on this file since 131 was 130, checked in by alloc, 10 years ago

Fixes

File size: 2.4 KB
RevLine 
[107]1using System;
2using System.Collections.Generic;
3using System.Threading;
4using UnityEngine;
5
[130]6namespace AllocsFixes
[107]7{
[130]8 public class ConsoleOutputSeparator
[107]9 {
[130]10 public struct AllocsTelnetCommand
11 {
12 public string command;
13 public AllocsTelnetConnection client;
[107]14
[130]15 public AllocsTelnetCommand (string _cmd, AllocsTelnetConnection _client)
16 {
17 command = _cmd;
18 client = _client;
19 }
[107]20 }
21
[130]22 private static List<AllocsTelnetCommand> telnetCommandQueue = new List<AllocsTelnetCommand> ();
23 private static bool isCurrentCommandFromClient = false;
24 private static AllocsTelnetConnection issuerOfCurrentTelnetCommand;
[107]25
[130]26 public static void C_ExecuteCmdFromClient (ConsoleSdtd console, NetworkPlayer _networkPlayer, string _playerID, string _command)
27 {
28 Log.Out ("Executed command \"" + _command + "\" from player \"" + _playerID + "\"");
[107]29
[130]30 object obj = telnetCommandQueue;
31 Monitor.Enter (obj);
32 try {
33 isCurrentCommandFromClient = true;
34 console.issuerOfCurrentClientCommand = _networkPlayer;
35 console.ExecuteClientCmdInternal (_playerID, _command);
36 isCurrentCommandFromClient = false;
37 } finally {
38 Monitor.Exit (obj);
39 }
40
[107]41 }
42
[130]43 public static void C_SendResult (ConsoleSdtd console, string _line)
44 {
45 if (isCurrentCommandFromClient) {
46 console.gameManager.GetRPCNetworkView ().RPC ("RPC_Console", console.issuerOfCurrentClientCommand, new object[]
[107]47 {
48 _line,
49 false
50 }
[130]51 );
52 } else {
53 if (console.telnetServer != null && issuerOfCurrentTelnetCommand != null)
54 AllocsNetTelnetServer.WriteToClient_Single (_line, issuerOfCurrentTelnetCommand);
55 else if (ControlPanel.IsStarted ())
56 ControlPanel.AddTextToOutputBuffer (_line);
57 }
[107]58 }
59
[130]60 public static void C_Run (ConsoleSdtd console)
61 {
62 if (telnetCommandQueue.Count > 0) {
63 object obj = telnetCommandQueue;
64 Monitor.Enter (obj);
65 try {
66 issuerOfCurrentTelnetCommand = telnetCommandQueue [0].client;
67 console.ExecuteRemoteCmdInternal (telnetCommandQueue [0].command, false);
68 telnetCommandQueue.RemoveAt (0);
69 issuerOfCurrentTelnetCommand = null;
70 } finally {
71 Monitor.Exit (obj);
72 }
73 }
74 }
75
76 public static void QueueTelnetCommand (string _line, AllocsTelnetConnection _con)
77 {
[107]78 object obj = telnetCommandQueue;
79 Monitor.Enter (obj);
80 try {
[130]81 telnetCommandQueue.Add (new AllocsTelnetCommand (_line, _con));
[107]82 } finally {
83 Monitor.Exit (obj);
84 }
85 }
86 }
87}
Note: See TracBrowser for help on using the repository browser.