2022-10-06 17:44:08 +08:00
|
|
|
|
using System;
|
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
|
using System.Linq;
|
2023-08-17 20:37:22 +08:00
|
|
|
|
using System.Net.Sockets;
|
|
|
|
|
|
using System.Net;
|
2022-10-06 17:44:08 +08:00
|
|
|
|
using System.Runtime.InteropServices;
|
|
|
|
|
|
using System.Text;
|
2023-06-19 21:44:21 +08:00
|
|
|
|
using System.Threading;
|
2024-03-29 17:34:14 +08:00
|
|
|
|
using System.IO;
|
|
|
|
|
|
using Jint.Runtime;
|
|
|
|
|
|
using System.Windows.Forms;
|
2022-10-06 17:44:08 +08:00
|
|
|
|
|
|
|
|
|
|
namespace BarrageGrab
|
|
|
|
|
|
{
|
|
|
|
|
|
public class Program
|
|
|
|
|
|
{
|
2024-03-29 11:30:03 +08:00
|
|
|
|
static FormView mainForm = null;
|
|
|
|
|
|
static bool exited = false;
|
|
|
|
|
|
static bool formExited = false;
|
2024-03-29 17:34:14 +08:00
|
|
|
|
static WinApi.ControlCtrlDelegate controlCtr = ControlCtrlHandle;
|
2024-03-29 11:30:03 +08:00
|
|
|
|
|
2022-10-06 17:44:08 +08:00
|
|
|
|
static void Main(string[] args)
|
2023-11-23 16:43:21 +08:00
|
|
|
|
{
|
2024-03-29 17:34:14 +08:00
|
|
|
|
//JintTest();
|
|
|
|
|
|
//Console.WriteLine("结束");
|
|
|
|
|
|
//Console.ReadKey();
|
|
|
|
|
|
//return;
|
2023-08-17 20:37:22 +08:00
|
|
|
|
if (CheckAlreadyRunning())
|
2022-10-06 17:44:08 +08:00
|
|
|
|
{
|
2024-03-10 03:43:44 +08:00
|
|
|
|
Logger.PrintColor("已经有一个监听程序在运行,按任意键退出...");
|
2023-08-17 20:37:22 +08:00
|
|
|
|
Console.ReadKey();
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
2024-03-29 11:30:03 +08:00
|
|
|
|
SetTitle("抖音弹幕监听推送");
|
2023-08-17 20:37:22 +08:00
|
|
|
|
|
2024-03-29 17:34:14 +08:00
|
|
|
|
try
|
|
|
|
|
|
{
|
|
|
|
|
|
Init();
|
|
|
|
|
|
}
|
|
|
|
|
|
catch (Exception ex)
|
|
|
|
|
|
{
|
2024-04-28 19:15:04 +08:00
|
|
|
|
Logger.LogError(ex, "程序初始化错误");
|
|
|
|
|
|
MessageBox.Show(ex.Message, "程序初始化错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
2024-03-29 17:34:14 +08:00
|
|
|
|
exited = true;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
while (!exited)
|
|
|
|
|
|
{
|
|
|
|
|
|
Thread.Sleep(500);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (!AppRuntime.WsServer.IsDisposed)
|
|
|
|
|
|
{
|
|
|
|
|
|
AppRuntime.WsServer.Dispose();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
Logger.PrintColor("服务器已关闭...");
|
|
|
|
|
|
WinApi.SetConsoleCtrlHandler(controlCtr, false);//反注册捕获控制台关闭
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private static void Init()
|
|
|
|
|
|
{
|
|
|
|
|
|
AppRuntime.Init();
|
|
|
|
|
|
WinApi.SetConsoleCtrlHandler(controlCtr, true);//捕获控制台关闭
|
2023-12-17 23:56:10 +08:00
|
|
|
|
WinApi.DisableQuickEditMode();//禁用控制台快速编辑模式
|
2024-03-29 17:46:24 +08:00
|
|
|
|
AppRuntime.DisplayConsole(!AppSetting.Current.HideConsole);//控制控制台可见
|
|
|
|
|
|
AppRuntime.WsServer.Grab.Proxy.SetUpstreamProxy(AppSetting.Current.UpstreamProxy);//设置上游代理
|
2024-03-29 17:34:14 +08:00
|
|
|
|
AppRuntime.WsServer.OnClose += (s, e) =>
|
|
|
|
|
|
{
|
|
|
|
|
|
exited = true;
|
|
|
|
|
|
};
|
2023-11-14 20:29:18 +08:00
|
|
|
|
|
2024-03-29 17:34:14 +08:00
|
|
|
|
//串口写入服务
|
2024-03-29 17:46:24 +08:00
|
|
|
|
if (!AppSetting.Current.ComPort.IsNullOrWhiteSpace())
|
2024-03-29 17:34:14 +08:00
|
|
|
|
{
|
|
|
|
|
|
AppRuntime.ComPortServer.OpenStart();
|
|
|
|
|
|
}
|
2024-03-29 11:30:03 +08:00
|
|
|
|
|
|
|
|
|
|
//显示窗体
|
2024-03-29 17:46:24 +08:00
|
|
|
|
if (AppSetting.Current.ShowWindow)
|
2023-11-23 16:43:21 +08:00
|
|
|
|
{
|
|
|
|
|
|
var uiThread = new Thread(new ThreadStart(() =>
|
|
|
|
|
|
{
|
|
|
|
|
|
mainForm = new FormView();
|
|
|
|
|
|
//开启消息循环
|
|
|
|
|
|
System.Windows.Forms.Application.Run(mainForm);
|
|
|
|
|
|
formExited = true;
|
2024-03-29 17:34:14 +08:00
|
|
|
|
AppRuntime.WsServer.Dispose();//Close后自动释放资源
|
2023-11-23 16:43:21 +08:00
|
|
|
|
}));
|
|
|
|
|
|
uiThread.SetApartmentState(ApartmentState.STA);
|
|
|
|
|
|
uiThread.IsBackground = true;
|
|
|
|
|
|
uiThread.Start();
|
|
|
|
|
|
}
|
2023-11-16 09:26:40 +08:00
|
|
|
|
|
2024-03-29 17:34:14 +08:00
|
|
|
|
AppRuntime.WsServer.StartListen();//启动WS以及代理服务
|
2024-05-12 14:47:30 +08:00
|
|
|
|
Logger.PrintColor($"{AppRuntime.WsServer.ServerLocation} 弹幕服务已启动...",ConsoleColor.Green);
|
2024-03-29 17:34:14 +08:00
|
|
|
|
SetTitle($"抖音弹幕监听推送 [{AppRuntime.WsServer.ServerLocation}]");
|
2022-10-06 17:44:08 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2024-03-29 11:30:03 +08:00
|
|
|
|
//检测设置控制台标题
|
|
|
|
|
|
private static void SetTitle(string title)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (WinApi.GetConsoleWindow() != IntPtr.Zero)
|
|
|
|
|
|
{
|
|
|
|
|
|
Console.Title = title;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//监听控制台消息事件
|
2024-03-29 17:34:14 +08:00
|
|
|
|
private static bool ControlCtrlHandle(int CtrlType)
|
2022-10-06 17:44:08 +08:00
|
|
|
|
{
|
|
|
|
|
|
switch (CtrlType)
|
|
|
|
|
|
{
|
|
|
|
|
|
case 0:
|
2024-03-10 03:43:44 +08:00
|
|
|
|
//Logger.PrintColor("0工具被强制关闭"); //Ctrl+C关闭
|
2022-10-06 17:44:08 +08:00
|
|
|
|
//server.Close();
|
|
|
|
|
|
break;
|
|
|
|
|
|
case 2:
|
2024-03-10 03:43:44 +08:00
|
|
|
|
Logger.PrintColor("2工具被强制关闭");//按控制台关闭按钮关闭
|
2024-03-29 17:34:14 +08:00
|
|
|
|
AppRuntime.WsServer.Dispose();
|
2022-10-06 17:44:08 +08:00
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
return false;
|
2024-03-29 11:30:03 +08:00
|
|
|
|
}
|
2023-06-19 21:44:21 +08:00
|
|
|
|
|
2023-08-17 20:37:22 +08:00
|
|
|
|
//检测程序是否多开
|
|
|
|
|
|
private static bool CheckAlreadyRunning()
|
2023-06-19 21:44:21 +08:00
|
|
|
|
{
|
2023-11-16 09:26:40 +08:00
|
|
|
|
const string mutexName = "DyBarrageGrab";
|
2023-08-17 20:37:22 +08:00
|
|
|
|
// Try to create a new named mutex.
|
2023-11-16 09:26:40 +08:00
|
|
|
|
bool createdNew;
|
|
|
|
|
|
using (Mutex mutex = new Mutex(true, mutexName, out createdNew))
|
2023-08-17 20:37:22 +08:00
|
|
|
|
{
|
|
|
|
|
|
return !createdNew;
|
|
|
|
|
|
}
|
2023-06-19 21:44:21 +08:00
|
|
|
|
}
|
2024-04-26 10:19:14 +08:00
|
|
|
|
#if DEBUG
|
2024-03-29 17:34:14 +08:00
|
|
|
|
private static void JintTest()
|
|
|
|
|
|
{
|
|
|
|
|
|
var jsEng = JsEngine.CreateNewEngine();
|
|
|
|
|
|
var jsFile = File.ReadAllText(Path.Combine(AppContext.BaseDirectory, "Scripts", "engine", "comPortFilter.js"), Encoding.UTF8);
|
2024-04-26 10:19:14 +08:00
|
|
|
|
//var jsFile = @"D:\develop\Project\dy-barrage-grab\BarrageGrab\Scripts\engine\comPortFilter.js";
|
2024-03-29 17:34:14 +08:00
|
|
|
|
jsEng.Execute(jsFile);
|
|
|
|
|
|
var result = jsEng.Invoke("onPackData", 1, new
|
|
|
|
|
|
{
|
|
|
|
|
|
Aporp = 142,
|
|
|
|
|
|
Bprop = "48777",
|
|
|
|
|
|
Cprop = new string[] { "123" },
|
|
|
|
|
|
Dprop = new Dictionary<string, string>()
|
|
|
|
|
|
{
|
|
|
|
|
|
{ "key1","value1" }
|
|
|
|
|
|
}
|
2024-04-26 10:19:14 +08:00
|
|
|
|
},null);
|
|
|
|
|
|
Console.WriteLine($"返回类型:{ result.Type.ToString()},值:{result.ToString()}");
|
2024-03-29 17:34:14 +08:00
|
|
|
|
if (result.Type == Types.String)
|
|
|
|
|
|
{
|
|
|
|
|
|
Console.WriteLine("返回String: " + result.ToString());
|
|
|
|
|
|
}
|
|
|
|
|
|
if (result.Type == Types.Object)
|
|
|
|
|
|
{
|
|
|
|
|
|
var obj = result.ToObject();
|
|
|
|
|
|
if (obj is byte[])
|
|
|
|
|
|
{
|
|
|
|
|
|
Console.WriteLine("返回byte[]");
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
if (result.Type == Types.Symbol)
|
|
|
|
|
|
{
|
|
|
|
|
|
Console.WriteLine("返回Symbol: " + result.ToString());
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
2024-04-26 10:19:14 +08:00
|
|
|
|
#endif
|
2022-10-06 17:44:08 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|