重构配置管理,新增 JSON 支持及图标
更新 `App.config`,移除并重新添加配置项;新增 `AppConfig.json` 文件以支持 JSON 格式配置;在 `AppSetting.cs` 中实现从 JSON 加载配置功能;修改 `ComPortServer.cs` 以适应新的配置项;更新项目文件以引用 `AppConfig.json` 并调整 `nlog.config` 路径;新增应用程序图标 `logo.ico`。
This commit is contained in:
+104
-106
@@ -1,109 +1,107 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<configuration>
|
<configuration>
|
||||||
<!--配置更改后重启才能生效-->
|
<!--配置更改后重启才能生效-->
|
||||||
<appSettings>
|
<appSettings>
|
||||||
<!--过滤Websocket数据源进程,可用','进行分隔,程序将会监听以下进程的弹幕信息-->
|
<!--过滤Websocket数据源进程,可用','进行分隔,程序将会监听以下进程的弹幕信息-->
|
||||||
<add key="processFilter" value="直播伴侣,douyin,chrome,msedge,QQBrowser,360se,firefox,2345explorer,iexplore" />
|
<add key="processFilter" value="直播伴侣,douyin,chrome,msedge,QQBrowser,360se,firefox,2345explorer,iexplore" />
|
||||||
<!--Websocket监听端口-->
|
<!--Websocket监听端口-->
|
||||||
<add key="wsListenPort" value="8888" />
|
<add key="wsListenPort" value="8888" />
|
||||||
<!--true:监听在0.0.0.0,接受任意Ip连接,false:监听在127.0.0.1,仅接受本机连接-->
|
<!--true:监听在0.0.0.0,接受任意Ip连接,false:监听在127.0.0.1,仅接受本机连接-->
|
||||||
<add key="listenAny" value="true" />
|
<add key="listenAny" value="true" />
|
||||||
<!--系统代理端口-->
|
<!--系统代理端口-->
|
||||||
<add key="proxyPort" value="8827" />
|
<add key="proxyPort" value="8827" />
|
||||||
<!--是否启用系统代理,若设置为false 则需要在程序手动指定代理地址 -->
|
<!--是否启用系统代理,若设置为false 则需要在程序手动指定代理地址 -->
|
||||||
<add key="sysProxy" value="true" />
|
<add key="sysProxy" value="true" />
|
||||||
<!--上游代理地址,例如开启了系统代理,但是需要将其他无关请求转发到VPN工具中,例如:127.0.0.1:11223,不要带http://-->
|
<!--上游代理地址,例如开启了系统代理,但是需要将其他无关请求转发到VPN工具中,例如:127.0.0.1:11223,不要带http://-->
|
||||||
<add key="upstreamProxy" value="" />
|
<add key="upstreamProxy" value="" />
|
||||||
<!--在控制台输出弹幕-->
|
<!--在控制台输出弹幕-->
|
||||||
<add key="printBarrage" value="true" />
|
<add key="printBarrage" value="true" />
|
||||||
<!--要在控制台打印的弹幕类型,多个使用','分隔,(空代表不过滤) 1[普通弹幕],2[点赞消息],3[进入直播间],4[关注消息],5[礼物消息],6[统计消息],7[粉丝团消息],8[直播间分享],9[下播]-->
|
<!--要在控制台打印的弹幕类型,多个使用','分隔,(空代表不过滤) 1[普通弹幕],2[点赞消息],3[进入直播间],4[关注消息],5[礼物消息],6[统计消息],7[粉丝团消息],8[直播间分享],9[下播]-->
|
||||||
<add key="printFilter" value="" />
|
<add key="printFilter" value="" />
|
||||||
<!--要推送的弹幕消息类型,多个使用','分隔,同上-->
|
<!--要推送的弹幕消息类型,多个使用','分隔,同上-->
|
||||||
<add key="pushFilter" value="" />
|
<add key="pushFilter" value="" />
|
||||||
<!--要日志记录的弹幕消息类型,多个使用','分隔,同上-->
|
<!--要日志记录的弹幕消息类型,多个使用','分隔,同上-->
|
||||||
<add key="logFilter" value="1,2,4,5,6,7,8" />
|
<add key="logFilter" value="1,2,4,5,6,7,8" />
|
||||||
<!--要进行过滤的Web房间ID,多个使用','分隔,根据缓存来过滤的,直播伴侣不支持 -->
|
<!--要进行过滤的Web房间ID,多个使用','分隔,根据缓存来过滤的,直播伴侣不支持 -->
|
||||||
<add key="webRoomIds" value="" />
|
<add key="webRoomIds" value="" />
|
||||||
<!--开启内置的域名过滤,设置为false会解包所有https请求,cpu占用很高,建议在无法获取弹幕数据时调整 -->
|
<!--开启内置的域名过滤,设置为false会解包所有https请求,cpu占用很高,建议在无法获取弹幕数据时调整 -->
|
||||||
<add key="filterHostName" value="true" />
|
<add key="filterHostName" value="true" />
|
||||||
<!--已知的弹幕域名列表 ','分隔 用作过滤规则中,凡是webcast开头的域名程序都会自动列入白名单-->
|
<!--已知的弹幕域名列表 ','分隔 用作过滤规则中,凡是webcast开头的域名程序都会自动列入白名单-->
|
||||||
<add key="hostNameFilter" value="" />
|
<add key="hostNameFilter" value="" />
|
||||||
<!--隐藏控制台-->
|
<!--隐藏控制台-->
|
||||||
<add key="hideConsole" value="false" />
|
<add key="hideConsole" value="false" />
|
||||||
<!--弹幕文件日志-->
|
<!--弹幕文件日志-->
|
||||||
<add key="barrageFileLog" value="false" />
|
<add key="barrageFileLog" value="false" />
|
||||||
<!--显示窗体-->
|
<!--显示窗体-->
|
||||||
<add key="showWindow" value="false" />
|
<add key="showWindow" value="false" />
|
||||||
<!--进入直播间自动暂停播放-->
|
<!--进入直播间自动暂停播放-->
|
||||||
<add key="autoPause" value="true" />
|
<add key="autoPause" value="true" />
|
||||||
<!--强制启用轮询模式获取弹幕 (对于容易断开连接或者更加追求稳定的直播间,可以启用这个开关,虽然响应速度不如WebSocket,但是绝对稳定!)-->
|
<!--强制启用轮询模式获取弹幕 (对于容易断开连接或者更加追求稳定的直播间,可以启用这个开关,虽然响应速度不如WebSocket,但是绝对稳定!)-->
|
||||||
<add key="forcePolling" value="false" />
|
<add key="forcePolling" value="false" />
|
||||||
<!--弹幕轮询间隔,当 forcePolling 为 true 时生效 (毫秒,1000毫秒=1秒,不建议小于1000毫秒,太小可能会被封IP,值越小,弹幕流越丝滑,对于观众多的直播间可以改小)-->
|
<!--弹幕轮询间隔,当 forcePolling 为 true 时生效 (毫秒,1000毫秒=1秒,不建议小于1000毫秒,太小可能会被封IP,值越小,弹幕流越丝滑,对于观众多的直播间可以改小)-->
|
||||||
<add key="pollingInterval" value="3000" />
|
<add key="pollingInterval" value="3000" />
|
||||||
<!--禁用直播页浏览器脚本缓存 (如果需要确保脚本每次能够正常匹配替换,则启用它,可能会损失一定的页面加载速度)-->
|
<!--禁用直播页浏览器脚本缓存 (如果需要确保脚本每次能够正常匹配替换,则启用它,可能会损失一定的页面加载速度)-->
|
||||||
<add key="disableLivePageScriptCache" value="false" />
|
<add key="disableLivePageScriptCache" value="false" />
|
||||||
<!--指定要发送的COM串口 格式:'COM1:9600' 代表用COM1发送,波特率9600,若不需要使用串口抄送服务请留空 -->
|
<!-- 指定要发送的COM串口 格式:'COM1:9600' 代表用COM1发送,波特率9600,若不需要使用串口抄送服务请留空,(启用后程序会自动生成过滤器模板文件到 scripts/comPortFilter.js) -->
|
||||||
<add key="comPort" value="" />
|
<add key="comPort" value="" />
|
||||||
<!--启用自定义消息过滤,启用后可去程序根目录 Scripts/engine/comPortFilter.js 调整过滤规则 -->
|
<!--直播伴侣exe文件位置(除非程序找不到,否则请留空)-->
|
||||||
<add key="useComPortFilter" value="true" />
|
<add key="liveCompanPath" value="" />
|
||||||
<!--直播伴侣exe文件位置(除非程序找不到,否则请留空)-->
|
<!--直播伴侣进程代理开关-->
|
||||||
<add key="liveCompanPath" value="" />
|
<add key="liveCompanHookSwitch" value="false" />
|
||||||
<!--直播伴侣进程代理开关-->
|
</appSettings>
|
||||||
<add key="liveCompanHookSwitch" value="false" />
|
<runtime>
|
||||||
</appSettings>
|
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||||
<runtime>
|
<dependentAssembly>
|
||||||
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
<assemblyIdentity name="System.Memory" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
|
||||||
<dependentAssembly>
|
<bindingRedirect oldVersion="0.0.0.0-4.0.1.2" newVersion="4.0.1.2" />
|
||||||
<assemblyIdentity name="System.Memory" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
|
</dependentAssembly>
|
||||||
<bindingRedirect oldVersion="0.0.0.0-4.0.1.2" newVersion="4.0.1.2" />
|
<dependentAssembly>
|
||||||
</dependentAssembly>
|
<assemblyIdentity name="System.Net.Http" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
||||||
<dependentAssembly>
|
<bindingRedirect oldVersion="0.0.0.0-4.1.1.0" newVersion="4.1.1.0" />
|
||||||
<assemblyIdentity name="System.Net.Http" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
</dependentAssembly>
|
||||||
<bindingRedirect oldVersion="0.0.0.0-4.1.1.0" newVersion="4.1.1.0" />
|
<dependentAssembly>
|
||||||
</dependentAssembly>
|
<assemblyIdentity name="System.IO.Compression" publicKeyToken="b77a5c561934e089" culture="neutral" />
|
||||||
<dependentAssembly>
|
<bindingRedirect oldVersion="0.0.0.0-4.1.2.0" newVersion="4.1.2.0" />
|
||||||
<assemblyIdentity name="System.IO.Compression" publicKeyToken="b77a5c561934e089" culture="neutral" />
|
</dependentAssembly>
|
||||||
<bindingRedirect oldVersion="0.0.0.0-4.1.2.0" newVersion="4.1.2.0" />
|
<dependentAssembly>
|
||||||
</dependentAssembly>
|
<assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
||||||
<dependentAssembly>
|
<bindingRedirect oldVersion="0.0.0.0-4.1.1.0" newVersion="4.1.1.0" />
|
||||||
<assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
</dependentAssembly>
|
||||||
<bindingRedirect oldVersion="0.0.0.0-4.1.1.0" newVersion="4.1.1.0" />
|
<dependentAssembly>
|
||||||
</dependentAssembly>
|
<assemblyIdentity name="System.Diagnostics.Tracing" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
||||||
<dependentAssembly>
|
<bindingRedirect oldVersion="0.0.0.0-4.1.1.0" newVersion="4.1.1.0" />
|
||||||
<assemblyIdentity name="System.Diagnostics.Tracing" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
</dependentAssembly>
|
||||||
<bindingRedirect oldVersion="0.0.0.0-4.1.1.0" newVersion="4.1.1.0" />
|
<dependentAssembly>
|
||||||
</dependentAssembly>
|
<assemblyIdentity name="System.Reflection" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
||||||
<dependentAssembly>
|
<bindingRedirect oldVersion="0.0.0.0-4.1.1.0" newVersion="4.1.1.0" />
|
||||||
<assemblyIdentity name="System.Reflection" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
</dependentAssembly>
|
||||||
<bindingRedirect oldVersion="0.0.0.0-4.1.1.0" newVersion="4.1.1.0" />
|
<dependentAssembly>
|
||||||
</dependentAssembly>
|
<assemblyIdentity name="System.Runtime.InteropServices" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
||||||
<dependentAssembly>
|
<bindingRedirect oldVersion="0.0.0.0-4.1.0.0" newVersion="4.1.0.0" />
|
||||||
<assemblyIdentity name="System.Runtime.InteropServices" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
</dependentAssembly>
|
||||||
<bindingRedirect oldVersion="0.0.0.0-4.1.0.0" newVersion="4.1.0.0" />
|
<dependentAssembly>
|
||||||
</dependentAssembly>
|
<assemblyIdentity name="System.Diagnostics.DiagnosticSource" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
|
||||||
<dependentAssembly>
|
<bindingRedirect oldVersion="0.0.0.0-4.0.1.0" newVersion="4.0.1.0" />
|
||||||
<assemblyIdentity name="System.Diagnostics.DiagnosticSource" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
|
</dependentAssembly>
|
||||||
<bindingRedirect oldVersion="0.0.0.0-4.0.1.0" newVersion="4.0.1.0" />
|
<dependentAssembly>
|
||||||
</dependentAssembly>
|
<assemblyIdentity name="System.Runtime.CompilerServices.Unsafe" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
||||||
<dependentAssembly>
|
<bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
|
||||||
<assemblyIdentity name="System.Runtime.CompilerServices.Unsafe" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
</dependentAssembly>
|
||||||
<bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
|
</assemblyBinding>
|
||||||
</dependentAssembly>
|
</runtime>
|
||||||
</assemblyBinding>
|
<startup>
|
||||||
</runtime>
|
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.2" />
|
||||||
<startup>
|
</startup>
|
||||||
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.2" />
|
<system.web>
|
||||||
</startup>
|
<membership defaultProvider="ClientAuthenticationMembershipProvider">
|
||||||
<system.web>
|
<providers>
|
||||||
<membership defaultProvider="ClientAuthenticationMembershipProvider">
|
<add name="ClientAuthenticationMembershipProvider" type="System.Web.ClientServices.Providers.ClientFormsAuthenticationMembershipProvider, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" serviceUri="" />
|
||||||
<providers>
|
</providers>
|
||||||
<add name="ClientAuthenticationMembershipProvider" type="System.Web.ClientServices.Providers.ClientFormsAuthenticationMembershipProvider, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" serviceUri="" />
|
</membership>
|
||||||
</providers>
|
<roleManager defaultProvider="ClientRoleProvider" enabled="true">
|
||||||
</membership>
|
<providers>
|
||||||
<roleManager defaultProvider="ClientRoleProvider" enabled="true">
|
<add name="ClientRoleProvider" type="System.Web.ClientServices.Providers.ClientRoleProvider, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" serviceUri="" cacheTimeout="86400" />
|
||||||
<providers>
|
</providers>
|
||||||
<add name="ClientRoleProvider" type="System.Web.ClientServices.Providers.ClientRoleProvider, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" serviceUri="" cacheTimeout="86400" />
|
</roleManager>
|
||||||
</providers>
|
</system.web>
|
||||||
</roleManager>
|
|
||||||
</system.web>
|
|
||||||
</configuration>
|
</configuration>
|
||||||
@@ -0,0 +1,71 @@
|
|||||||
|
{
|
||||||
|
// 配置更改后重启才能生效
|
||||||
|
"app": {
|
||||||
|
"general": {
|
||||||
|
// 是否隐藏控制台
|
||||||
|
"hideConsole": false,
|
||||||
|
// 显示窗体
|
||||||
|
"showWindow": false
|
||||||
|
},
|
||||||
|
"network": {
|
||||||
|
"proxy": {
|
||||||
|
// 系统代理端口
|
||||||
|
"port": 8827,
|
||||||
|
// 是否启用系统代理,若设置为false 则需要在程序手动指定代理地址
|
||||||
|
"enabled": true,
|
||||||
|
// 上游代理地址,例如开启了系统代理,但是需要将其他无关请求转发到VPN工具中,例如:127.0.0.1:11223,不要带http://
|
||||||
|
"upstreamAddress": ""
|
||||||
|
},
|
||||||
|
"websocket": {
|
||||||
|
// Websocket监听端口
|
||||||
|
"listenPort": 8888,
|
||||||
|
// true:监听在0.0.0.0,接受任意Ip连接,false:监听在127.0.0.1,仅接受本机连接
|
||||||
|
"listenAny": true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"filtering": {
|
||||||
|
// 过滤Websocket数据源进程,可用','进行分隔,程序将会监听以下进程的弹幕信息
|
||||||
|
"processFilter": "直播伴侣,douyin,chrome,msedge,QQBrowser,360se,firefox,2345explorer,iexplore",
|
||||||
|
// 开启内置的域名过滤,设置为false会解包所有https请求,cpu占用很高,建议在无法获取弹幕数据时调整
|
||||||
|
"hostNameEnabled": true,
|
||||||
|
// 已知的弹幕域名列表 ','分隔 用作过滤规则中,凡是webcast开头的域名程序都会自动列入白名单
|
||||||
|
"hostNameList": "",
|
||||||
|
// 要进行过滤的Web房间ID,多个使用','分隔,根据缓存来过滤的,直播伴侣不支持
|
||||||
|
"webRoomIds": ""
|
||||||
|
},
|
||||||
|
"barrage": {
|
||||||
|
// 在控制台输出弹幕
|
||||||
|
"printEnabled": true,
|
||||||
|
// 要在控制台打印的弹幕类型,多个使用','分隔,(空代表不过滤) 1[普通弹幕],2[点赞消息],3[进入直播间],4[关注消息],5[礼物消息],6[统计消息],7[粉丝团消息],8[直播间分享],9[下播]
|
||||||
|
"printFilter": "",
|
||||||
|
// 要推送的弹幕消息类型,多个使用','分隔,同上
|
||||||
|
"pushFilter": "",
|
||||||
|
// 弹幕文件日志
|
||||||
|
"barrageFileLog": false,
|
||||||
|
// 要日志记录的弹幕消息类型,多个使用','分隔,同上
|
||||||
|
"logFilter": "1,2,4,5,6,7,8",
|
||||||
|
//轮询配置
|
||||||
|
"polling": {
|
||||||
|
// 强制启用轮询模式获取弹幕 (对于容易断开连接或者更加追求稳定的直播间,可以启用这个开关,虽然响应速度不如WebSocket,但是绝对稳定!)
|
||||||
|
"enabled": false,
|
||||||
|
// 弹幕轮询间隔,当 forcePolling 为 true 时生效 (毫秒,1000毫秒=1秒,不建议小于1000毫秒,太小可能会被封IP,值越小,弹幕流越丝滑,对于观众多的直播间可以改小)
|
||||||
|
"interval": 3000,
|
||||||
|
// 禁用直播页浏览器脚本缓存 (如果需要确保脚本每次能够正常匹配替换,则启用它,可能会损失一定的页面加载速度)
|
||||||
|
"disableScriptCache": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"liveCompanion": {
|
||||||
|
// 直播伴侣exe文件位置(除非程序找不到,否则请留空)
|
||||||
|
"path": "",
|
||||||
|
// 直播伴侣进程代理开关
|
||||||
|
"hookEnabled": false,
|
||||||
|
// 进入直播间自动暂停播放
|
||||||
|
"autoPause": true
|
||||||
|
},
|
||||||
|
|
||||||
|
"comPort": {
|
||||||
|
// 指定要发送的COM串口 格式:'COM1:9600' 代表用COM1发送,波特率9600,若不需要使用串口抄送服务请留空,(启用后程序会自动生成过滤器模板文件到 scripts/comPortFilter.js)
|
||||||
|
"config": ""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
+403
-2
@@ -2,10 +2,12 @@
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Configuration;
|
using System.Configuration;
|
||||||
using System.Drawing;
|
using System.Drawing;
|
||||||
|
using System.IO;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using BarrageGrab.Modles.JsonEntity;
|
using BarrageGrab.Modles.JsonEntity;
|
||||||
|
using Newtonsoft.Json.Linq;
|
||||||
using static System.Configuration.ConfigurationManager;
|
using static System.Configuration.ConfigurationManager;
|
||||||
|
|
||||||
namespace BarrageGrab
|
namespace BarrageGrab
|
||||||
@@ -53,6 +55,405 @@ namespace BarrageGrab
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 从JSON文件加载配置
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="jsonFilePath">JSON配置文件路径</param>
|
||||||
|
public void LoadFromJson(string jsonFilePath = null)
|
||||||
|
{
|
||||||
|
if(jsonFilePath==null) jsonFilePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "appConfig.json");
|
||||||
|
try
|
||||||
|
{
|
||||||
|
if(!File.Exists(jsonFilePath))
|
||||||
|
{
|
||||||
|
Logger.LogError($"配置文件不存在: {jsonFilePath}");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 读取JSON文件内容(保留注释)
|
||||||
|
string jsonContent = File.ReadAllText(jsonFilePath);
|
||||||
|
|
||||||
|
// 解析JSON(Newtonsoft.Json支持JSONC格式,会自动忽略注释)
|
||||||
|
JObject config = JObject.Parse(jsonContent);
|
||||||
|
|
||||||
|
// 从JSON读取应用配置
|
||||||
|
var app = config["app"];
|
||||||
|
|
||||||
|
// 常规配置
|
||||||
|
var general = app["general"];
|
||||||
|
HideConsole = general["hideConsole"]?.Value<bool>() ?? false;
|
||||||
|
ShowWindow = general["showWindow"]?.Value<bool>() ?? false;
|
||||||
|
|
||||||
|
// 网络配置
|
||||||
|
var network = app["network"];
|
||||||
|
var proxy = network["proxy"];
|
||||||
|
ProxyPort = proxy["port"]?.Value<int>() ?? 8827;
|
||||||
|
UsedProxy = proxy["enabled"]?.Value<bool>() ?? true;
|
||||||
|
UpstreamProxy = proxy["upstreamAddress"]?.Value<string>() ?? string.Empty;
|
||||||
|
|
||||||
|
var websocket = network["websocket"];
|
||||||
|
WsProt = websocket["listenPort"]?.Value<int>() ?? 8888;
|
||||||
|
ListenAny = websocket["listenAny"]?.Value<bool>() ?? true;
|
||||||
|
|
||||||
|
// 过滤配置
|
||||||
|
var filtering = app["filtering"];
|
||||||
|
string processFilterStr = filtering["processFilter"]?.Value<string>() ?? "直播伴侣,douyin,chrome,msedge,QQBrowser,360se,firefox,2345explorer,iexplore";
|
||||||
|
ProcessFilter = processFilterStr.Split(',');
|
||||||
|
FilterHostName = filtering["hostNameEnabled"]?.Value<bool>() ?? true;
|
||||||
|
string hostNameFilterStr = filtering["hostNameList"]?.Value<string>() ?? string.Empty;
|
||||||
|
HostNameFilter = !string.IsNullOrWhiteSpace(hostNameFilterStr)
|
||||||
|
? hostNameFilterStr.Split(',').Where(w => !string.IsNullOrWhiteSpace(w)).ToArray()
|
||||||
|
: new string[0];
|
||||||
|
string webRoomIdsStr = filtering["webRoomIds"]?.Value<string>() ?? string.Empty;
|
||||||
|
WebRoomIds = !string.IsNullOrWhiteSpace(webRoomIdsStr)
|
||||||
|
? webRoomIdsStr.Split(',').Where(w => !string.IsNullOrWhiteSpace(w)).ToArray()
|
||||||
|
: new string[0];
|
||||||
|
|
||||||
|
// 弹幕配置
|
||||||
|
var barrage = app["barrage"];
|
||||||
|
PrintBarrage = barrage["printEnabled"]?.Value<bool>() ?? true;
|
||||||
|
BarrageLog = barrage["barrageFileLog"]?.Value<bool>() ?? false;
|
||||||
|
var polling = app["barrage"]["polling"];
|
||||||
|
ForcePolling = polling["enabled"]?.Value<bool>() ?? false;
|
||||||
|
PollingInterval = polling["interval"]?.Value<int>() ?? 3000;
|
||||||
|
DisableLivePageScriptCache = polling["disableScriptCache"]?.Value<bool>() ?? false;
|
||||||
|
|
||||||
|
// 设置默认过滤器
|
||||||
|
PrintFilter = Enum.GetValues(typeof(PackMsgType)).Cast<int>().Where(w => w > 0).ToArray();
|
||||||
|
PushFilter = Enum.GetValues(typeof(PackMsgType)).Cast<int>().Where(w => w > 0).ToArray();
|
||||||
|
LogFilter = Enum.GetValues(typeof(PackMsgType)).Cast<int>().Where(w => w > 0).ToArray();
|
||||||
|
|
||||||
|
string printFilterStr = barrage["printFilter"]?.Value<string>() ?? string.Empty;
|
||||||
|
string pushFilterStr = barrage["pushFilter"]?.Value<string>() ?? string.Empty;
|
||||||
|
string logFilterStr = barrage["logFilter"]?.Value<string>() ?? "1,2,4,5,6,7,8";
|
||||||
|
|
||||||
|
// 解析过滤器
|
||||||
|
if (!string.IsNullOrWhiteSpace(printFilterStr))
|
||||||
|
{
|
||||||
|
PrintFilter = printFilterStr.Split(',').Select(x => int.Parse(x)).ToArray();
|
||||||
|
}
|
||||||
|
if (!string.IsNullOrWhiteSpace(pushFilterStr))
|
||||||
|
{
|
||||||
|
PushFilter = pushFilterStr.Split(',').Select(x => int.Parse(x)).ToArray();
|
||||||
|
}
|
||||||
|
if (!string.IsNullOrWhiteSpace(logFilterStr))
|
||||||
|
{
|
||||||
|
LogFilter = logFilterStr.Split(',').Select(x => int.Parse(x)).ToArray();
|
||||||
|
}
|
||||||
|
|
||||||
|
// 直播伴侣配置
|
||||||
|
var liveCompanion = app["liveCompanion"];
|
||||||
|
LiveCompanPath = liveCompanion["path"]?.Value<string>() ?? string.Empty;
|
||||||
|
LiveCompanHookSwitch = liveCompanion["hookEnabled"]?.Value<bool>() ?? false;
|
||||||
|
AutoPause = liveCompanion["autoPause"]?.Value<bool>() ?? true;
|
||||||
|
|
||||||
|
// COM端口配置
|
||||||
|
var comPort = app["comPort"];
|
||||||
|
string comPortStr = comPort["config"]?.Value<string>() ?? string.Empty;
|
||||||
|
if (!string.IsNullOrWhiteSpace(comPortStr))
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var spit = comPortStr.Split(':');
|
||||||
|
ComPort = spit[0].Trim();
|
||||||
|
ComBaudRate = int.Parse(spit[1].Trim());
|
||||||
|
ComPortSwitch = true;
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
throw new Exception("串口配置格式错误," + ex.Message, ex);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Logger.PrintColor("已从JSON配置文件加载设置");
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Logger.PrintColor($"从JSON加载配置失败: {ex.Message},将尝试从App.config加载");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 从启动参数加载配置
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="args">命令行参数数组</param>
|
||||||
|
public void LoadFromCommand(string[] args)
|
||||||
|
{
|
||||||
|
if (args == null || args.Length == 0)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Logger.PrintColor("正在从命令行参数加载配置...");
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
for (int i = 0; i < args.Length; i++)
|
||||||
|
{
|
||||||
|
string arg = args[i].ToLower().Trim();
|
||||||
|
|
||||||
|
// 如果参数以-或--开头,则为命令行开关
|
||||||
|
if (arg.StartsWith("-") || arg.StartsWith("--"))
|
||||||
|
{
|
||||||
|
string paramName = arg.TrimStart('-');
|
||||||
|
string paramValue = string.Empty;
|
||||||
|
bool switchDef = false;
|
||||||
|
|
||||||
|
// 检查下一个参数是否是值(不是以-开头)
|
||||||
|
if (i + 1 < args.Length && !(args[i + 1].StartsWith("-") || args[i + 1].StartsWith("--")))
|
||||||
|
{
|
||||||
|
paramValue = args[i + 1];
|
||||||
|
i++; // 跳过已处理的值参数
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// 对于布尔开关,没有值意味着true
|
||||||
|
paramValue = "?";
|
||||||
|
switchDef = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 根据参数名称设置相应的配置
|
||||||
|
switch (paramName)
|
||||||
|
{
|
||||||
|
// 网络相关配置
|
||||||
|
case "port":
|
||||||
|
case "wsport":
|
||||||
|
case "ws-port":
|
||||||
|
if (int.TryParse(paramValue, out int wsPort))
|
||||||
|
{
|
||||||
|
WsProt = wsPort;
|
||||||
|
Logger.PrintColor($"WebSocket端口设置为: {wsPort}");
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "proxy-port":
|
||||||
|
case "proxyport":
|
||||||
|
if (int.TryParse(paramValue, out int proxyPort))
|
||||||
|
{
|
||||||
|
ProxyPort = proxyPort;
|
||||||
|
Logger.PrintColor($"代理端口设置为: {proxyPort}");
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "upstream":
|
||||||
|
case "upstream-proxy":
|
||||||
|
UpstreamProxy = paramValue;
|
||||||
|
Logger.PrintColor($"上游代理设置为: {paramValue}");
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "listen-any":
|
||||||
|
case "listenany":
|
||||||
|
if (switchDef) break;
|
||||||
|
ListenAny = ParseBool(paramValue);
|
||||||
|
Logger.PrintColor($"监听任意IP设置为: {ListenAny}");
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "sysproxy":
|
||||||
|
case "sys-proxy":
|
||||||
|
if (switchDef) break;
|
||||||
|
UsedProxy = ParseBool(paramValue);
|
||||||
|
Logger.PrintColor($"系统代理设置为: {UsedProxy}");
|
||||||
|
break;
|
||||||
|
|
||||||
|
// 过滤相关配置
|
||||||
|
case "process-filter":
|
||||||
|
case "processfilter":
|
||||||
|
ProcessFilter = paramValue.Split(',');
|
||||||
|
Logger.PrintColor($"进程过滤器设置为: {paramValue}");
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "hostname-filter":
|
||||||
|
case "hostnamefilter":
|
||||||
|
HostNameFilter = paramValue.Split(',').Where(w => !string.IsNullOrWhiteSpace(w)).ToArray();
|
||||||
|
Logger.PrintColor($"域名过滤器设置为: {paramValue}");
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "filter-hostname":
|
||||||
|
case "filterhostname":
|
||||||
|
if (switchDef) break;
|
||||||
|
FilterHostName = ParseBool(paramValue);
|
||||||
|
Logger.PrintColor($"是否启用域名过滤设置为: {FilterHostName}");
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "room-ids":
|
||||||
|
case "roomids":
|
||||||
|
WebRoomIds = paramValue.Split(',').Where(w => !string.IsNullOrWhiteSpace(w)).ToArray();
|
||||||
|
Logger.PrintColor($"房间ID过滤器设置为: {paramValue}");
|
||||||
|
break;
|
||||||
|
|
||||||
|
// 弹幕相关配置
|
||||||
|
case "print":
|
||||||
|
case "print-barrage":
|
||||||
|
if (switchDef) break;
|
||||||
|
PrintBarrage = ParseBool(paramValue);
|
||||||
|
Logger.PrintColor($"控制台打印弹幕设置为: {PrintBarrage}");
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "print-filter":
|
||||||
|
case "printfilter":
|
||||||
|
if (!string.IsNullOrWhiteSpace(paramValue))
|
||||||
|
{
|
||||||
|
PrintFilter = paramValue.Split(',').Select(x => int.Parse(x)).ToArray();
|
||||||
|
Logger.PrintColor($"控制台打印过滤器设置为: {paramValue}");
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "push-filter":
|
||||||
|
case "pushfilter":
|
||||||
|
if (!string.IsNullOrWhiteSpace(paramValue))
|
||||||
|
{
|
||||||
|
PushFilter = paramValue.Split(',').Select(x => int.Parse(x)).ToArray();
|
||||||
|
Logger.PrintColor($"推送过滤器设置为: {paramValue}");
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "log-filter":
|
||||||
|
case "logfilter":
|
||||||
|
if (!string.IsNullOrWhiteSpace(paramValue))
|
||||||
|
{
|
||||||
|
LogFilter = paramValue.Split(',').Select(x => int.Parse(x)).ToArray();
|
||||||
|
Logger.PrintColor($"日志过滤器设置为: {paramValue}");
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "barrage-log":
|
||||||
|
case "barragelog":
|
||||||
|
if (switchDef) break;
|
||||||
|
BarrageLog = ParseBool(paramValue);
|
||||||
|
Logger.PrintColor($"弹幕文件日志设置为: {BarrageLog}");
|
||||||
|
break;
|
||||||
|
|
||||||
|
// 显示和控制台相关
|
||||||
|
case "hide-console":
|
||||||
|
case "hideconsole":
|
||||||
|
if (switchDef) break;
|
||||||
|
HideConsole = ParseBool(paramValue);
|
||||||
|
Logger.PrintColor($"隐藏控制台设置为: {HideConsole}");
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "show-window":
|
||||||
|
case "showwindow":
|
||||||
|
if (switchDef) break;
|
||||||
|
ShowWindow = ParseBool(paramValue);
|
||||||
|
Logger.PrintColor($"显示窗体设置为: {ShowWindow}");
|
||||||
|
break;
|
||||||
|
|
||||||
|
// 轮询相关配置
|
||||||
|
case "force-polling":
|
||||||
|
case "forcepolling":
|
||||||
|
if (switchDef) break;
|
||||||
|
ForcePolling = ParseBool(paramValue);
|
||||||
|
Logger.PrintColor($"强制轮询模式设置为: {ForcePolling}");
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "polling-interval":
|
||||||
|
case "pollinginterval":
|
||||||
|
if (int.TryParse(paramValue, out int interval))
|
||||||
|
{
|
||||||
|
PollingInterval = interval;
|
||||||
|
Logger.PrintColor($"轮询间隔设置为: {interval}ms");
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "disable-cache":
|
||||||
|
case "disablecache":
|
||||||
|
if (switchDef) break;
|
||||||
|
DisableLivePageScriptCache = ParseBool(paramValue);
|
||||||
|
Logger.PrintColor($"禁用脚本缓存设置为: {DisableLivePageScriptCache}");
|
||||||
|
break;
|
||||||
|
|
||||||
|
// 直播伴侣相关
|
||||||
|
case "auto-pause":
|
||||||
|
case "autopause":
|
||||||
|
if (switchDef) break;
|
||||||
|
AutoPause = ParseBool(paramValue);
|
||||||
|
Logger.PrintColor($"自动暂停设置为: {AutoPause}");
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "livecompan-path":
|
||||||
|
case "livecompanpath":
|
||||||
|
LiveCompanPath = paramValue;
|
||||||
|
Logger.PrintColor($"直播伴侣路径设置为: {paramValue}");
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "livecompan-hook":
|
||||||
|
case "livecompanhook":
|
||||||
|
if (switchDef) break;
|
||||||
|
LiveCompanHookSwitch = ParseBool(paramValue);
|
||||||
|
Logger.PrintColor($"直播伴侣Hook开关设置为: {LiveCompanHookSwitch}");
|
||||||
|
break;
|
||||||
|
|
||||||
|
// COM端口相关
|
||||||
|
case "com":
|
||||||
|
case "comport":
|
||||||
|
if (!string.IsNullOrWhiteSpace(paramValue))
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var parts = paramValue.Split(':');
|
||||||
|
if (parts.Length == 2)
|
||||||
|
{
|
||||||
|
ComPort = parts[0].Trim();
|
||||||
|
ComBaudRate = int.Parse(parts[1].Trim());
|
||||||
|
ComPortSwitch = true;
|
||||||
|
Logger.PrintColor($"COM端口设置为: {ComPort} 波特率: {ComBaudRate}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Logger.LogError($"COM端口配置格式错误: {ex.Message}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
// 配置文件相关
|
||||||
|
case "config":
|
||||||
|
case "jsonconfig":
|
||||||
|
try
|
||||||
|
{
|
||||||
|
if (File.Exists(paramValue))
|
||||||
|
{
|
||||||
|
LoadFromJson();
|
||||||
|
Logger.PrintColor($"已从JSON配置文件加载配置: {paramValue}");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Logger.LogError($"指定的配置文件不存在: {paramValue}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Logger.LogError($"加载JSON配置文件失败: {ex.Message}");
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
Logger.LogWarn($"未知的命令行参数: {arg}");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Logger.PrintColor("命令行参数配置加载完成");
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Logger.LogError($"命令行参数解析错误: {ex.Message}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 解析布尔值字符串
|
||||||
|
/// </summary>
|
||||||
|
private bool ParseBool(string value)
|
||||||
|
{
|
||||||
|
if (string.IsNullOrWhiteSpace(value))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
value = value.ToLower().Trim();
|
||||||
|
|
||||||
|
return value == "true" || value == "1" || value == "yes" || value == "y" || value == "on";
|
||||||
|
}
|
||||||
|
|
||||||
//com串口设置
|
//com串口设置
|
||||||
private void ConfigComPort()
|
private void ConfigComPort()
|
||||||
@@ -65,7 +466,7 @@ namespace BarrageGrab
|
|||||||
var spit = comPort.Split(':');
|
var spit = comPort.Split(':');
|
||||||
ComPort = spit[0].Trim();
|
ComPort = spit[0].Trim();
|
||||||
ComBaudRate = int.Parse(spit[1].Trim());
|
ComBaudRate = int.Parse(spit[1].Trim());
|
||||||
UseComPortFilter = bool.Parse(AppSettings["useComPortFilter"]);
|
ComPortSwitch = true;
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
@@ -244,7 +645,7 @@ namespace BarrageGrab
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// 是否启用串口过滤器脚本
|
/// 是否启用串口过滤器脚本
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public bool UseComPortFilter { get; set; }
|
public bool ComPortSwitch { get; set; } = false;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 直播伴侣文件位置
|
/// 直播伴侣文件位置
|
||||||
|
|||||||
+34
-4
@@ -46,15 +46,45 @@ namespace BarrageGrab
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 从engine 目录获取js 文件
|
/// 从scripts 目录获取js 文件
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="fileName"></param>
|
/// <param name="fileName"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public static string GetJsFile(string fileName)
|
public static string GetJsFile(string fileName)
|
||||||
{
|
{
|
||||||
var path = Path.Combine(AppContext.BaseDirectory, "Scripts", "engine", fileName);
|
var checkDirs = new string[]
|
||||||
if (!File.Exists(path)) return null;
|
{
|
||||||
return File.ReadAllText(path, Encoding.UTF8);
|
Path.Combine(AppContext.BaseDirectory, "Scripts"),
|
||||||
|
Path.Combine(AppContext.BaseDirectory, "scripts"),
|
||||||
|
};
|
||||||
|
|
||||||
|
foreach (var dir in checkDirs)
|
||||||
|
{
|
||||||
|
if (Directory.Exists(dir))
|
||||||
|
{
|
||||||
|
var path = Path.Combine(dir, fileName);
|
||||||
|
if (File.Exists(path))
|
||||||
|
{
|
||||||
|
return File.ReadAllText(path, Encoding.UTF8);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 在scripts目录下创建js 文件
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="fileName"></param>
|
||||||
|
/// <param name="content"></param>
|
||||||
|
public static void CreateJsFile(string fileName,string content)
|
||||||
|
{
|
||||||
|
var dir = Path.Combine(AppContext.BaseDirectory, "scripts");
|
||||||
|
if (!Directory.Exists(dir))
|
||||||
|
{
|
||||||
|
Directory.CreateDirectory(dir);
|
||||||
|
}
|
||||||
|
File.WriteAllText(Path.Combine(dir, fileName), content, Encoding.UTF8);
|
||||||
}
|
}
|
||||||
|
|
||||||
class JsConsole
|
class JsConsole
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ using System.Runtime.InteropServices;
|
|||||||
[assembly: AssemblyConfiguration("")]
|
[assembly: AssemblyConfiguration("")]
|
||||||
[assembly: AssemblyCompany("小白不圆个人工作室")]
|
[assembly: AssemblyCompany("小白不圆个人工作室")]
|
||||||
[assembly: AssemblyProduct("抖音弹幕监听器")]
|
[assembly: AssemblyProduct("抖音弹幕监听器")]
|
||||||
[assembly: AssemblyCopyright("Copyright © 2022")]
|
[assembly: AssemblyCopyright("Copyright © 2022")]
|
||||||
[assembly: AssemblyTrademark("")]
|
[assembly: AssemblyTrademark("")]
|
||||||
[assembly: AssemblyCulture("")]
|
[assembly: AssemblyCulture("")]
|
||||||
|
|
||||||
@@ -33,6 +33,6 @@ using System.Runtime.InteropServices;
|
|||||||
//可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值
|
//可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值
|
||||||
//通过使用 "*",如下所示:
|
//通过使用 "*",如下所示:
|
||||||
// [assembly: AssemblyVersion("1.0.*")]
|
// [assembly: AssemblyVersion("1.0.*")]
|
||||||
[assembly: AssemblyVersion("2.7.8")]
|
[assembly: AssemblyVersion("2.7.9")]
|
||||||
[assembly: AssemblyFileVersion("2.7.8")]
|
[assembly: AssemblyFileVersion("2.7.9")]
|
||||||
[assembly: NeutralResourcesLanguage("zh-CN")]
|
[assembly: NeutralResourcesLanguage("zh-CN")]
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.IO;
|
||||||
using System.IO.Ports;
|
using System.IO.Ports;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
@@ -22,26 +23,30 @@ namespace BarrageGrab
|
|||||||
|
|
||||||
static ComPortServer()
|
static ComPortServer()
|
||||||
{
|
{
|
||||||
if (AppSetting.Current.UseComPortFilter)
|
if (!AppSetting.Current.ComPortSwitch) return;
|
||||||
|
|
||||||
|
jsEngine = JsEngine.CreateNewEngine();
|
||||||
|
|
||||||
|
var jsFile = JsEngine.GetJsFile("comPortFilter.js");
|
||||||
|
|
||||||
|
//生成模板文件
|
||||||
|
if (jsFile == null)
|
||||||
{
|
{
|
||||||
jsEngine = JsEngine.CreateNewEngine();
|
jsFile = EmbResource.GetFileContent("comPortFilter.js");
|
||||||
|
JsEngine.CreateJsFile("comPortFilter.js", jsFile);
|
||||||
var jsFile = JsEngine.GetJsFile("comPortFilter.js");
|
Logger.PrintColor($"已生成串口脚本模板文件 scripts/comPortFilter.js,请按个人需求修改", ConsoleColor.Yellow);
|
||||||
if (jsFile.IsNullOrWhiteSpace())
|
|
||||||
{
|
|
||||||
jsFile = EmbResource.GetFileContent("comPortFilter.js");
|
|
||||||
}
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
jsEngine.Execute(jsFile);
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
Logger.LogError(ex, $"comPortFilter.js 执行错误: {ex.Message}");
|
|
||||||
throw;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
jsEngine.Execute(jsFile);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Logger.LogError(ex, $"comPortFilter.js 执行错误: {ex.Message}");
|
||||||
|
throw;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public ComPortServer(WsBarrageServer server)
|
public ComPortServer(WsBarrageServer server)
|
||||||
@@ -70,7 +75,7 @@ namespace BarrageGrab
|
|||||||
if (e == null) return;
|
if (e == null) return;
|
||||||
if (e.Message == null) return;
|
if (e.Message == null) return;
|
||||||
|
|
||||||
if (!AppSetting.Current.UseComPortFilter)
|
if (!AppSetting.Current.ComPortSwitch)
|
||||||
{
|
{
|
||||||
var json = e.ToJson() + "\r\n";
|
var json = e.ToJson() + "\r\n";
|
||||||
var jbuff = Encoding.UTF8.GetBytes(json);
|
var jbuff = Encoding.UTF8.GetBytes(json);
|
||||||
@@ -152,7 +157,7 @@ namespace BarrageGrab
|
|||||||
sendPort.Close();
|
sendPort.Close();
|
||||||
sendPort.Dispose();
|
sendPort.Dispose();
|
||||||
sendPort = null;
|
sendPort = null;
|
||||||
throw ex;
|
Logger.LogError(ex, $"串口打开失败, {ex.Message}");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -63,6 +63,9 @@
|
|||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<ApplicationManifest>Properties\app.manifest</ApplicationManifest>
|
<ApplicationManifest>Properties\app.manifest</ApplicationManifest>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
<PropertyGroup>
|
||||||
|
<ApplicationIcon>logo.ico</ApplicationIcon>
|
||||||
|
</PropertyGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Reference Include="Acornima, Version=1.1.0.0, Culture=neutral, PublicKeyToken=496b38436bb9edeb, processorArchitecture=MSIL">
|
<Reference Include="Acornima, Version=1.1.0.0, Culture=neutral, PublicKeyToken=496b38436bb9edeb, processorArchitecture=MSIL">
|
||||||
<HintPath>..\packages\Acornima.1.1.0\lib\net462\Acornima.dll</HintPath>
|
<HintPath>..\packages\Acornima.1.1.0\lib\net462\Acornima.dll</HintPath>
|
||||||
@@ -259,14 +262,16 @@
|
|||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<None Include="App.config" />
|
<None Include="App.config" />
|
||||||
<EmbeddedResource Include="nlog.config">
|
<EmbeddedResource Include="Configs\nlog.config">
|
||||||
<CustomToolNamespace>WssBarrageService</CustomToolNamespace>
|
<CustomToolNamespace>WssBarrageService</CustomToolNamespace>
|
||||||
</EmbeddedResource>
|
</EmbeddedResource>
|
||||||
|
<None Include="AppConfig.json" />
|
||||||
<None Include="packages.config" />
|
<None Include="packages.config" />
|
||||||
<None Include="Properties\app.manifest" />
|
<None Include="Properties\app.manifest" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Content Include="FodyWeavers.xml" />
|
<Content Include="FodyWeavers.xml" />
|
||||||
|
<Content Include="logo.ico" />
|
||||||
<EmbeddedResource Include="Scripts\engine\comPortFilter.js" />
|
<EmbeddedResource Include="Scripts\engine\comPortFilter.js" />
|
||||||
<EmbeddedResource Include="Scripts\inject\livePage.js" />
|
<EmbeddedResource Include="Scripts\inject\livePage.js" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|||||||
Binary file not shown.
|
After Width: | Height: | Size: 17 KiB |
Reference in New Issue
Block a user