Files
WinWARP/WinWARP.Service/Worker.cs
T
2026-08-22 19:11:00 +03:00

92 lines
3.4 KiB
C#

using SingboxLib.Configuration.Outbound.Shared;
using SingBoxLib.Configuration;
using SingBoxLib.Configuration.Dns;
using SingBoxLib.Configuration.Inbound;
using SingBoxLib.Configuration.Inbound.Abstract;
using SingBoxLib.Configuration.Outbound;
using SingBoxLib.Configuration.Outbound.Abstract;
using SingBoxLib.Configuration.Shared;
using SingBoxLib.Parsing;
using SingBoxLib.Runtime;
namespace WinWARP.Service;
public class Worker(ILogger<Worker> logger) : BackgroundService
{
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
var profileUrl = "vless://5af742f0-5915-492e-b618-406e8170c77f@redlt.jojackcraft.ru:443?encryption=none&flow=xtls-rprx-vision&type=tcp&security=reality&sni=goo.su&fp=qq&pbk=1vSZjvhZO01oAEH3b7eebR1qF5dLU1Dq2E7xu8pwGSs&sid=428ef87fd47a3a32&spx=%2F#%F0%9F%87%B1%F0%9F%87%B9%C2%B2%E2%9A%A1%20%D0%9B%D0%B8%D1%82%D0%B2%D0%B0";
var profile = ProfileParser.ParseProfileUrl(profileUrl);
// 1. Define your sing-box configuration
var config = new SingBoxConfig
{
Inbounds = new()
{
new MixedInbound
{
Listen = "127.0.0.1",
ListenPort = 12534,
SetSystemProxy = true
}
},
Outbounds = new List<OutboundConfig>
{
new VLessOutbound
{
Server = "redlt.jojackcraft.ru",
ServerPort = 443,
Uuid = "5af742f0-5915-492e-b618-406e8170c77f",
Flow = "xtls-rprx-vision",
Tls = new OutboundTlsConfig
{
Enabled = true,
ServerName = "goo.su",
UTls = new UtlsConfig
{
Enabled = true,
Fingerprint = "qq"
},
Reality = new OutboundRealityConfig
{
Enabled = true,
PublicKey = "1vSZjvhZO01oAEH3b7eebR1qF5dLU1Dq2E7xu8pwGSs",
ShortId = "428ef87fd47a3a32"
}
},
PacketEncoding = "xudp"
}
}
};
// 2. Initialize wrapper with path to sing-box executable
var wrapper = new SingBoxWrapper("SingBox/sing-box.exe");
// 3. Subscribe to the log event to inspect output or errors
wrapper.OnLog += (sender, logArgs) =>
{
if (logger.IsEnabled(LogLevel.Information))
{
logger.LogInformation(logArgs);
}
};
// 4. Start the sing-box process
using var cts = new CancellationTokenSource();
//var runTask = wrapper.StartAsync(config, stoppingToken);
// 5. Terminate the sing-box process gracefully by cancelling the token
//await cts.CancelAsync();
//await runTask;
//while (!stoppingToken.IsCancellationRequested)
//{
// if (logger.IsEnabled(LogLevel.Information))
// {
// logger.LogInformation("Worker running at: {time}", DateTimeOffset.Now);
// }
// await Task.Delay(1000, stoppingToken);
//}
}
}