Create basic web server to receive commands
This commit is contained in:
commit
ef662f1d1e
5 changed files with 126 additions and 0 deletions
8
.gitignore
vendored
Normal file
8
.gitignore
vendored
Normal file
|
@ -0,0 +1,8 @@
|
|||
bin/
|
||||
obj/
|
||||
/packages/
|
||||
riderModule.iml
|
||||
/_ReSharper.Caches/
|
||||
|
||||
.idea
|
||||
TBConsole.sln.DotSettings.user
|
16
TBConsole.sln
Normal file
16
TBConsole.sln
Normal file
|
@ -0,0 +1,16 @@
|
|||
|
||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TBConsole", "TBConsole\TBConsole.csproj", "{9B1B4559-5C22-4F75-B29B-2E1E1E761B1A}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
Release|Any CPU = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{9B1B4559-5C22-4F75-B29B-2E1E1E761B1A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{9B1B4559-5C22-4F75-B29B-2E1E1E761B1A}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{9B1B4559-5C22-4F75-B29B-2E1E1E761B1A}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{9B1B4559-5C22-4F75-B29B-2E1E1E761B1A}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
EndGlobal
|
21
TBConsole/TBConsole.csproj
Normal file
21
TBConsole/TBConsole.csproj
Normal file
|
@ -0,0 +1,21 @@
|
|||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>netcoreapp3.1</TargetFramework>
|
||||
<OutputType>Exe</OutputType>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Lib.Harmony" Version="2.0.4" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Reference Include="GamecraftModdingAPI">
|
||||
<HintPath>..\..\GamecraftModdingAPI\GamecraftModdingAPI\bin\Debug\net472\GamecraftModdingAPI.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="IllusionPlugin">
|
||||
<HintPath>..\..\GamecraftModdingAPI\GamecraftModdingAPI\bin\Debug\net472\IllusionPlugin.dll</HintPath>
|
||||
</Reference>
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
41
TBConsole/TBConsoleMod.cs
Normal file
41
TBConsole/TBConsoleMod.cs
Normal file
|
@ -0,0 +1,41 @@
|
|||
using System;
|
||||
using System.IO;
|
||||
using System.Net;
|
||||
using System.Reflection;
|
||||
using IllusionPlugin;
|
||||
|
||||
namespace TBConsole
|
||||
{
|
||||
public class TBConsoleMod : IEnhancedPlugin
|
||||
{
|
||||
public override string Name => "TBConsole";
|
||||
public override string Version { get; } = Assembly.GetExecutingAssembly().GetName().Version.ToString();
|
||||
|
||||
private WebServer _server;
|
||||
public override void OnApplicationStart()
|
||||
{
|
||||
GamecraftModdingAPI.Main.Init();
|
||||
_server = new WebServer(CommandReceived);
|
||||
_server.Start();
|
||||
}
|
||||
|
||||
public string CommandReceived(string command)
|
||||
{
|
||||
return $"Got it: {command}";
|
||||
}
|
||||
|
||||
public override void OnApplicationQuit()
|
||||
{
|
||||
_server.Stop();
|
||||
GamecraftModdingAPI.Main.Shutdown();
|
||||
}
|
||||
|
||||
public static void Main(string[] args)
|
||||
{
|
||||
var mod = new TBConsoleMod();
|
||||
mod._server = new WebServer(mod.CommandReceived);
|
||||
mod._server.Start();
|
||||
Console.ReadLine();
|
||||
}
|
||||
}
|
||||
}
|
40
TBConsole/WebServer.cs
Normal file
40
TBConsole/WebServer.cs
Normal file
|
@ -0,0 +1,40 @@
|
|||
using System;
|
||||
using System.IO;
|
||||
using System.Net;
|
||||
|
||||
namespace TBConsole
|
||||
{
|
||||
public class WebServer
|
||||
{
|
||||
private bool _running;
|
||||
private readonly HttpListener _listener = new HttpListener();
|
||||
private Func<string, string> _receiver;
|
||||
public WebServer(Func<string, string> receiver) => _receiver = receiver;
|
||||
|
||||
public void Start()
|
||||
{
|
||||
_running = true;
|
||||
KeepListening();
|
||||
}
|
||||
|
||||
public void Stop()
|
||||
{
|
||||
_running = false;
|
||||
_listener.Stop();
|
||||
}
|
||||
|
||||
private async void KeepListening()
|
||||
{
|
||||
_listener.Prefixes.Add("http://localhost:8019/");
|
||||
_listener.Start();
|
||||
while (_running)
|
||||
{
|
||||
var context = await _listener.GetContextAsync();
|
||||
string resp = _receiver(await new StreamReader(context.Request.InputStream).ReadToEndAsync());
|
||||
var sw = new StreamWriter(context.Response.OutputStream);
|
||||
await sw.WriteLineAsync(resp);
|
||||
sw.Close();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue