From e3a73c0151cfb0bc8b1ebaeb96b9e36807d0cd66 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E7=99=BD=E7=8C=BF?= <1083092844@qq.com> Date: Mon, 19 Jun 2023 21:44:21 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=8E=A7=E5=88=B6=E5=8F=B0?= =?UTF-8?q?=E7=82=B9=E5=87=BB=E9=98=BB=E5=A1=9E=E9=97=AE=E9=A2=98;=20?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E7=A8=8B=E5=BA=8F=E5=85=B3=E9=97=AD=E6=8C=87?= =?UTF-8?q?=E4=BB=A4=E5=85=A5=E5=8F=A3;?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- BarrageGrab/Program.cs | 62 +++++++++++++++++++++------- BarrageGrab/WsBarrageService.cs | 25 ++++++++++- BarrageGrab/WssBarrageGrab.cs | 2 +- BarrageGrab/WssBarrageService.csproj | 1 + 4 files changed, 72 insertions(+), 18 deletions(-) diff --git a/BarrageGrab/Program.cs b/BarrageGrab/Program.cs index e2d19e9..b74f62f 100644 --- a/BarrageGrab/Program.cs +++ b/BarrageGrab/Program.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Linq; using System.Runtime.InteropServices; using System.Text; +using System.Threading; using System.Threading.Tasks; namespace BarrageGrab @@ -14,24 +15,26 @@ namespace BarrageGrab static WsBarrageService server = null; static void Main(string[] args) { - SetConsoleCtrlHandler(cancelHandler, true);//捕获控制台关闭 - Console.Title = "抖音弹幕监听推送"; + SetConsoleCtrlHandler(cancelHandler, true);//捕获控制台关闭 + Console.Title = "抖音弹幕监听推送"; + DisableQuickEditMode(); + bool exited = false; server = new WsBarrageService(); - server.StartListen(); - - while (true) + server.StartListen(); + server.OnClose += (s, e) => { - var input = Console.ReadKey(); - switch (input.Key) - { - case ConsoleKey.Escape: goto end; break; - } - } + //退出程序 + exited = true; + }; - end: - server.Close(); - Console.WriteLine("服务器已正常关闭,按任意键结束..."); - Console.ReadKey(); + while (!exited) + { + Thread.Sleep(500); + } + Console.WriteLine("服务器已关闭..."); + + //退出程序,不显示 按任意键退出 + Environment.Exit(0); } @@ -54,5 +57,34 @@ namespace BarrageGrab } return false; } + + + const int STD_INPUT_HANDLE = -10; + const uint ENABLE_QUICK_EDIT_MODE = 0x0040; + [DllImport("kernel32.dll", SetLastError = true)] + internal static extern IntPtr GetStdHandle(int hConsoleHandle); + [DllImport("kernel32.dll", SetLastError = true)] + internal static extern bool GetConsoleMode(IntPtr hConsoleHandle, out uint mode); + [DllImport("kernel32.dll", SetLastError = true)] + internal static extern bool SetConsoleMode(IntPtr hConsoleHandle, uint mode); + + public static void EnableQuickEditMode() + { + IntPtr hStdin = GetStdHandle(STD_INPUT_HANDLE); + uint mode; + GetConsoleMode(hStdin, out mode); + mode |= ENABLE_QUICK_EDIT_MODE; + SetConsoleMode(hStdin, mode); + } + + public static void DisableQuickEditMode() + { + IntPtr hStdin = GetStdHandle(STD_INPUT_HANDLE); + uint mode; + GetConsoleMode(hStdin, out mode); + mode &= ~ENABLE_QUICK_EDIT_MODE; + SetConsoleMode(hStdin, mode); + } + } } diff --git a/BarrageGrab/WsBarrageService.cs b/BarrageGrab/WsBarrageService.cs index c9c5b35..098bdc9 100644 --- a/BarrageGrab/WsBarrageService.cs +++ b/BarrageGrab/WsBarrageService.cs @@ -31,6 +31,11 @@ namespace BarrageGrab WssBarrageGrab grab = new WssBarrageGrab(); Appsetting Appsetting = Appsetting.Current; bool debug = false; + + /// + /// 服务关闭后触发 + /// + public event EventHandler OnClose; public WsBarrageService() { @@ -399,6 +404,22 @@ namespace BarrageGrab socketList[clientUrl].Socket = socket; } + //接收指令 + socket.OnMessage = (message) => + { + try + { + var cmdPack = JsonConvert.DeserializeObject(message); + if (cmdPack == null) return; + + if (cmdPack.Cmd == CommandCode.Close) + { + this.Close(); + } + } + catch (Exception) {} + }; + socket.OnClose = () => { socketList.Remove(clientUrl); @@ -440,7 +461,7 @@ namespace BarrageGrab } /// - /// 关闭服务器连接 + /// 关闭服务器连接,并关闭系统代理 /// public void Close() { @@ -449,7 +470,7 @@ namespace BarrageGrab socketServer.Dispose(); grab.Dispose(); - console.WriteLine("服务器已关闭..."); + this.OnClose?.Invoke(this, EventArgs.Empty); } class UserState diff --git a/BarrageGrab/WssBarrageGrab.cs b/BarrageGrab/WssBarrageGrab.cs index 614da85..976bdd0 100644 --- a/BarrageGrab/WssBarrageGrab.cs +++ b/BarrageGrab/WssBarrageGrab.cs @@ -81,7 +81,7 @@ namespace BarrageGrab public void Dispose() { - proxy.Dispose(); + proxy.Dispose(); } //域名过滤器 diff --git a/BarrageGrab/WssBarrageService.csproj b/BarrageGrab/WssBarrageService.csproj index aba6053..c7a8960 100644 --- a/BarrageGrab/WssBarrageService.csproj +++ b/BarrageGrab/WssBarrageService.csproj @@ -108,6 +108,7 @@ +