@@ -1,8 +1,11 @@ | |||
<Project Sdk="Microsoft.NET.Sdk"> | |||
<PropertyGroup> | |||
<!-- | |||
<TargetFramework>netcoreapp3.1</TargetFramework> | |||
<OutputType>Exe</OutputType> | |||
--> | |||
<TargetFramework>netstandard2.0</TargetFramework> | |||
</PropertyGroup> | |||
<ItemGroup> | |||
@@ -16,6 +19,9 @@ | |||
<Reference Include="IllusionPlugin"> | |||
<HintPath>..\..\GamecraftModdingAPI\GamecraftModdingAPI\bin\Debug\net472\IllusionPlugin.dll</HintPath> | |||
</Reference> | |||
<Reference Include="UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null"> | |||
<HintPath>..\..\ref\TechbloxPreview_Data\Managed\UnityEngine.CoreModule.dll</HintPath> | |||
</Reference> | |||
</ItemGroup> | |||
</Project> |
@@ -2,7 +2,10 @@ | |||
using System.IO; | |||
using System.Net; | |||
using System.Reflection; | |||
using System.Threading.Tasks; | |||
using GamecraftModdingAPI.Commands; | |||
using IllusionPlugin; | |||
using UnityEngine; | |||
namespace TBConsole | |||
{ | |||
@@ -12,6 +15,7 @@ namespace TBConsole | |||
public override string Version { get; } = Assembly.GetExecutingAssembly().GetName().Version.ToString(); | |||
private WebServer _server; | |||
private UnityLogHandler _logHandler; | |||
public override void OnApplicationStart() | |||
{ | |||
GamecraftModdingAPI.Main.Init(); | |||
@@ -19,9 +23,32 @@ namespace TBConsole | |||
_server.Start(); | |||
} | |||
public string CommandReceived(string command) | |||
private async Task<string> CommandReceived(string command) | |||
{ | |||
return $"Got it: {command}"; | |||
if (_logHandler == null) | |||
Debug.unityLogger.logHandler = _logHandler = new UnityLogHandler(Debug.unityLogger.logHandler); | |||
var logTask = _logHandler.CollectLogMessages(); | |||
var cmdparts = command.Split(' '); | |||
switch (cmdparts.Length) | |||
{ | |||
case 1: | |||
ExistingCommands.Call(cmdparts[0]); | |||
break; | |||
case 2: | |||
ExistingCommands.Call(cmdparts[0], cmdparts[1]); | |||
break; | |||
case 3: | |||
ExistingCommands.Call(cmdparts[0], cmdparts[1], cmdparts[2]); | |||
break; | |||
case 4: | |||
ExistingCommands.Call(cmdparts[0], cmdparts[1], cmdparts[2], cmdparts[3]); | |||
break; | |||
default: | |||
return "Too many arguments! Maximum for default commands is 3"; | |||
} | |||
string result = await logTask; | |||
return $"Got it: {command}\n{result}"; | |||
} | |||
public override void OnApplicationQuit() | |||
@@ -0,0 +1,35 @@ | |||
using System; | |||
using System.Threading.Tasks; | |||
using UnityEngine; | |||
using Object = UnityEngine.Object; | |||
namespace TBConsole | |||
{ | |||
public class UnityLogHandler : ILogHandler | |||
{ | |||
private readonly ILogHandler _original; | |||
private string _collectedLog = null; | |||
public UnityLogHandler(ILogHandler original) => _original = original; | |||
public void LogFormat(LogType logType, Object context, string format, params object[] args) | |||
{ | |||
if (_collectedLog != null) | |||
_collectedLog += $"{logType} - {string.Format(format, args)} - {context}\n"; | |||
_original.LogFormat(logType, context, format, args); | |||
} | |||
public void LogException(Exception exception, Object context) | |||
{ | |||
_original.LogException(exception, context); | |||
} | |||
public async Task<string> CollectLogMessages() | |||
{ | |||
_collectedLog = ""; | |||
await Task.Delay(1000); | |||
string ret = _collectedLog; | |||
_collectedLog = null; | |||
return ret; | |||
} | |||
} | |||
} |
@@ -1,6 +1,7 @@ | |||
using System; | |||
using System.IO; | |||
using System.Net; | |||
using System.Threading.Tasks; | |||
namespace TBConsole | |||
{ | |||
@@ -8,8 +9,8 @@ namespace TBConsole | |||
{ | |||
private bool _running; | |||
private readonly HttpListener _listener = new HttpListener(); | |||
private Func<string, string> _receiver; | |||
public WebServer(Func<string, string> receiver) => _receiver = receiver; | |||
private Func<string, Task<string>> _receiver; | |||
public WebServer(Func<string, Task<string>> receiver) => _receiver = receiver; | |||
public void Start() | |||
{ | |||
@@ -30,7 +31,7 @@ namespace TBConsole | |||
while (_running) | |||
{ | |||
var context = await _listener.GetContextAsync(); | |||
string resp = _receiver(await new StreamReader(context.Request.InputStream).ReadToEndAsync()); | |||
string resp = await _receiver(await new StreamReader(context.Request.InputStream).ReadToEndAsync()); | |||
var sw = new StreamWriter(context.Response.OutputStream); | |||
await sw.WriteLineAsync(resp); | |||
sw.Close(); | |||