From 903f45cbdf9185f8d5405bc49bcc959cd4406071 Mon Sep 17 00:00:00 2001 From: xiaoxin <2932869213@qq.com> Date: Mon, 13 Oct 2025 18:20:42 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=8A=E4=BC=A0=E6=96=87=E4=BB=B6=E8=87=B3?= =?UTF-8?q?=20WebServer?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- WebServer/ApiController.cs | 8 +++++ WebServer/WebServer.cs | 63 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 71 insertions(+) create mode 100644 WebServer/ApiController.cs create mode 100644 WebServer/WebServer.cs diff --git a/WebServer/ApiController.cs b/WebServer/ApiController.cs new file mode 100644 index 0000000..78d9fd7 --- /dev/null +++ b/WebServer/ApiController.cs @@ -0,0 +1,8 @@ +using EmbedIO.WebApi; + +namespace SinmaiAssist.WebServer.Api; + +public class ApiController : WebApiController +{ + // TODO: 添加API +} \ No newline at end of file diff --git a/WebServer/WebServer.cs b/WebServer/WebServer.cs new file mode 100644 index 0000000..becad04 --- /dev/null +++ b/WebServer/WebServer.cs @@ -0,0 +1,63 @@ +using System; +using System.Threading.Tasks; +using EmbedIO; +using EmbedIO.WebApi; +using MelonLoader; +using SinmaiAssist.WebServer.Api; + +namespace SinmaiAssist.WebServer; + + +public class WebServer +{ + private EmbedIO.WebServer _server; + private readonly string _host; + private readonly int _port; + private readonly string _token; + private readonly string _url; + private bool _isRunning = false; + + public WebServer(string host, int port, string token) + { + _host = host; + _port = port; + _token = token; + _url = $"http://{_host}:{_port}/"; + if (!string.IsNullOrEmpty(_token)) + _url += $"{_token}/"; + } + + public void Start() + { + try + { + _server = new EmbedIO.WebServer(o => o + .WithUrlPrefix(_url) + .WithMode(HttpListenerMode.EmbedIO)) + .WithWebApi("/api", m => m + .WithController()) + .WithStaticFolder("/", "Frontend", true); + + Task.Run(() => _server.RunAsync()); + _isRunning = true; + MelonLogger.Msg($"[WebServer] WebServer started with: {_url}"); + } + catch (Exception ex) + { + MelonLogger.Error($"[WebServer] Failed to start WebServer: {ex}"); + throw; + } + } + + public void Stop() + { + _server?.Dispose(); + _isRunning = false; + MelonLogger.Msg($"[WebServer] WebServer stopped"); + } + + public bool IsRunning() + { + return _server != null && _isRunning; + } +}