Call builtin commands then read log for 1 second

This commit is contained in:
Norbi Peti 2021-04-24 01:58:13 +02:00
parent ef662f1d1e
commit 8d9e568cac
No known key found for this signature in database
GPG key ID: DBA4C4549A927E56
4 changed files with 74 additions and 5 deletions

View file

@ -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>

View file

@ -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()

View file

@ -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;
}
}
}

View file

@ -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();