mirror of
https://github.com/FastTunnel/FastTunnel.git
synced 2025-02-08 02:39:29 +08:00
增加Host以及依赖注入
This commit is contained in:
parent
649aec5cc3
commit
3b448a7440
|
@ -12,6 +12,9 @@
|
|||
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="3.1.0" />
|
||||
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="3.1.0" />
|
||||
<PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="3.1.0" />
|
||||
<PackageReference Include="NLog" Version="4.6.8" />
|
||||
<PackageReference Include="NLog.Extensions.Logging" Version="1.6.1" />
|
||||
<PackageReference Include="NLog" Version="4.6.8" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
@ -22,6 +25,9 @@
|
|||
<None Update="appsettings.json">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</None>
|
||||
<None Update="Nlog.config">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</None>
|
||||
</ItemGroup>
|
||||
|
||||
<ProjectExtensions><VisualStudio><UserProperties appsettings_1json__JsonSchema="" /></VisualStudio></ProjectExtensions>
|
||||
|
|
|
@ -10,6 +10,9 @@ using System.Net.Sockets;
|
|||
using System.Text;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using NLog;
|
||||
using FastTunnel.Core.Host;
|
||||
using FastTunnel.Core.Config;
|
||||
|
||||
namespace FastTunnel.Client
|
||||
{
|
||||
|
@ -18,26 +21,58 @@ namespace FastTunnel.Client
|
|||
static void Main(string[] args)
|
||||
{
|
||||
Console.WriteLine("Client Start!");
|
||||
var logger = LogManager.GetCurrentClassLogger();
|
||||
|
||||
var conf = new ConfigurationBuilder()
|
||||
.SetBasePath(Directory.GetCurrentDirectory())
|
||||
.AddJsonFile("appsettings.json", true, true)
|
||||
.Build();
|
||||
try
|
||||
{
|
||||
var servicesProvider = new Host().Config(Config).Build();
|
||||
|
||||
Run(servicesProvider);
|
||||
|
||||
var settings = conf.Get<Appsettings>();
|
||||
|
||||
Run(settings);
|
||||
while (true)
|
||||
{
|
||||
Thread.Sleep(10000 * 60);
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
// NLog: catch any exception and log it.
|
||||
logger.Error(ex, "Stopped program because of exception");
|
||||
throw;
|
||||
}
|
||||
finally
|
||||
{
|
||||
// Ensure to flush and stop internal timers/threads before application-exit (Avoid segmentation fault on Linux)
|
||||
LogManager.Shutdown();
|
||||
}
|
||||
}
|
||||
|
||||
private static void Run(Appsettings settings)
|
||||
private static void Run(IServiceProvider servicesProvider)
|
||||
{
|
||||
var FastTunnelClient = new FastTunnelClient(settings.ClientSettings, new ConsoleLogger());
|
||||
FastTunnelClient.Login();
|
||||
var client = servicesProvider.GetRequiredService<FastTunnelClient>();
|
||||
client.Login();
|
||||
|
||||
while (true)
|
||||
{
|
||||
Thread.Sleep(10000 * 60);
|
||||
}
|
||||
}
|
||||
|
||||
private static void Config(ServiceCollection service)
|
||||
{
|
||||
service.AddTransient<FastTunnelClient>()
|
||||
.AddSingleton<ClientConfig>(implementationFactory);
|
||||
}
|
||||
|
||||
private static ClientConfig implementationFactory(IServiceProvider arg)
|
||||
{
|
||||
var conf = new ConfigurationBuilder()
|
||||
.SetBasePath(Directory.GetCurrentDirectory())
|
||||
.AddJsonFile("appsettings.json", true, true)
|
||||
.Build();
|
||||
|
||||
var settings = conf.Get<Appsettings>();
|
||||
return settings.ClientSettings;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -12,6 +12,7 @@ using System.Threading.Tasks;
|
|||
using FastTunnel.Core.Extensions;
|
||||
using System.Timers;
|
||||
using System.Threading;
|
||||
using Microsoft.Extensions.Logging;
|
||||
|
||||
namespace FastTunnel.Core.Client
|
||||
{
|
||||
|
@ -21,7 +22,7 @@ namespace FastTunnel.Core.Client
|
|||
|
||||
Connecter _client;
|
||||
|
||||
ILogger _logger;
|
||||
ILogger<FastTunnelClient> _logger;
|
||||
|
||||
System.Timers.Timer timer_timeout;
|
||||
System.Timers.Timer timer_heart;
|
||||
|
@ -30,7 +31,7 @@ namespace FastTunnel.Core.Client
|
|||
DateTime lastHeart;
|
||||
Thread th;
|
||||
|
||||
public FastTunnelClient(ClientConfig clientConfig, ILogger logger)
|
||||
public FastTunnelClient(ClientConfig clientConfig, ILogger<FastTunnelClient> logger)
|
||||
{
|
||||
_logger = logger;
|
||||
_clientConfig = clientConfig;
|
||||
|
@ -60,7 +61,7 @@ namespace FastTunnel.Core.Client
|
|||
var span = (DateTime.Now - lastHeart).TotalMilliseconds;
|
||||
if (span > timer.Interval)
|
||||
{
|
||||
_logger.Debug($"上次心跳时间为{span}ms前");
|
||||
_logger.LogDebug($"上次心跳时间为{span}ms前");
|
||||
|
||||
// 重新登录
|
||||
reConnect();
|
||||
|
@ -81,7 +82,7 @@ namespace FastTunnel.Core.Client
|
|||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logger.Error(ex.Message);
|
||||
_logger.LogError(ex.Message);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -99,18 +100,18 @@ namespace FastTunnel.Core.Client
|
|||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logger.Error(ex);
|
||||
_logger.LogError(ex);
|
||||
}
|
||||
finally
|
||||
{
|
||||
_client.Socket.Close();
|
||||
_logger.Debug("已退出登录\n");
|
||||
_logger.LogDebug("已退出登录\n");
|
||||
}
|
||||
}
|
||||
|
||||
public void Login()
|
||||
{
|
||||
_logger.Debug("登录中...");
|
||||
_logger.LogDebug("登录中...");
|
||||
|
||||
//连接到的目标IP
|
||||
try
|
||||
|
@ -120,7 +121,7 @@ namespace FastTunnel.Core.Client
|
|||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logger.Error(ex.Message);
|
||||
_logger.LogError(ex.Message);
|
||||
_client.Socket.Close();
|
||||
|
||||
Thread.Sleep(5000);
|
||||
|
@ -130,7 +131,7 @@ namespace FastTunnel.Core.Client
|
|||
|
||||
// 登录
|
||||
_client.Send(new Message<LogInRequest> { MessageType = MessageType.C_LogIn, Content = new LogInRequest { ClientConfig = _clientConfig } });
|
||||
_logger.Debug("登录成功");
|
||||
_logger.LogDebug("登录成功");
|
||||
|
||||
// 心跳开始
|
||||
timer_heart.Start();
|
||||
|
@ -192,7 +193,7 @@ namespace FastTunnel.Core.Client
|
|||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logger.Error(ex.Message);
|
||||
_logger.LogError(ex.Message);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
@ -234,15 +235,15 @@ namespace FastTunnel.Core.Client
|
|||
break;
|
||||
case MessageType.Info:
|
||||
var info = Msg.Content.ToJson();
|
||||
_logger.Info(info);
|
||||
_logger.LogInformation(info);
|
||||
break;
|
||||
case MessageType.Debug:
|
||||
var debug = Msg.Content.ToJson();
|
||||
_logger.Debug(debug);
|
||||
case MessageType.LogDebug:
|
||||
var LogDebug = Msg.Content.ToJson();
|
||||
_logger.LogDebug(LogDebug);
|
||||
break;
|
||||
case MessageType.Error:
|
||||
var err = Msg.Content.ToJson();
|
||||
_logger.Error(err);
|
||||
_logger.LogError(err);
|
||||
break;
|
||||
case MessageType.C_SwapMsg:
|
||||
case MessageType.C_LogIn:
|
||||
|
@ -252,8 +253,8 @@ namespace FastTunnel.Core.Client
|
|||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logger.Error(ex);
|
||||
_logger.Error(words);
|
||||
_logger.LogError(ex);
|
||||
_logger.LogError(words);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -8,7 +8,16 @@
|
|||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.Extensions.Configuration" Version="3.1.0" />
|
||||
<PackageReference Include="Microsoft.Extensions.Configuration.Abstractions" Version="3.1.0" />
|
||||
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="3.1.0" />
|
||||
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="3.1.0" />
|
||||
<PackageReference Include="Microsoft.Extensions.Configuration.FileExtensions" Version="3.1.0" />
|
||||
<PackageReference Include="Microsoft.Extensions.Configuration.Binder" Version="3.1.0" />
|
||||
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="3.1.0" />
|
||||
<PackageReference Include="Newtonsoft.Json" Version="12.0.3" />
|
||||
<PackageReference Include="NLog" Version="4.6.8" />
|
||||
<PackageReference Include="NLog.Extensions.Logging" Version="1.6.1" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
|
|
|
@ -1,16 +1,18 @@
|
|||
using FastTunnel.Core.Logger;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Net;
|
||||
using System.Net.Sockets;
|
||||
using System.Text;
|
||||
using System.Threading;
|
||||
using FastTunnel.Core.Extensions;
|
||||
|
||||
namespace FastTunnel.Core
|
||||
{
|
||||
public class Listener<T>
|
||||
{
|
||||
ILogger _logerr;
|
||||
ILogger<object> _logerr;
|
||||
|
||||
public string IP { get; set; }
|
||||
|
||||
|
@ -21,7 +23,7 @@ namespace FastTunnel.Core
|
|||
T _data;
|
||||
|
||||
|
||||
public Listener(string ip, int port, ILogger logerr, Action<Socket, T> acceptCustomerHandler, T data)
|
||||
public Listener(string ip, int port, ILogger<object> logerr, Action<Socket, T> acceptCustomerHandler, T data)
|
||||
{
|
||||
_logerr = logerr;
|
||||
_data = data;
|
||||
|
@ -58,7 +60,7 @@ namespace FastTunnel.Core
|
|||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logerr.Error(ex);
|
||||
_logerr.LogError(ex);
|
||||
throw;
|
||||
}
|
||||
}
|
||||
|
@ -84,7 +86,7 @@ namespace FastTunnel.Core
|
|||
finally
|
||||
{
|
||||
ls.Close();
|
||||
_logerr.Debug("Listener closed");
|
||||
_logerr.LogDebug("Listener closed");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -11,7 +11,7 @@ namespace FastTunnel.Core.Logger
|
|||
Console.WriteLine(string.Format("Erro - {0}", msg?.ToString()));
|
||||
}
|
||||
|
||||
public void Debug(string msg)
|
||||
public void LogDebug(string msg)
|
||||
{
|
||||
Console.WriteLine(string.Format("Debu - {0}", msg));
|
||||
}
|
||||
|
|
|
@ -12,7 +12,7 @@ namespace FastTunnel.Core.Logger
|
|||
|
||||
void Warning(string msg);
|
||||
|
||||
void Debug(string msg);
|
||||
void LogDebug(string msg);
|
||||
|
||||
void Info(string msg);
|
||||
}
|
||||
|
|
|
@ -25,7 +25,7 @@ namespace FastTunnel.Core.Models
|
|||
// twoway
|
||||
Info,
|
||||
|
||||
Debug,
|
||||
LogDebug,
|
||||
|
||||
Error
|
||||
}
|
||||
|
|
|
@ -12,6 +12,7 @@ using System.Net.Sockets;
|
|||
using System.Text;
|
||||
using System.Text.RegularExpressions;
|
||||
using System.Threading.Tasks;
|
||||
using Microsoft.Extensions.Logging;
|
||||
|
||||
namespace FastTunnel.Core.Server
|
||||
{
|
||||
|
@ -22,9 +23,9 @@ namespace FastTunnel.Core.Server
|
|||
Dictionary<string, NewRequest> newRequest = new Dictionary<string, NewRequest>();
|
||||
|
||||
private ServerConfig serverSettings;
|
||||
ILogger _logger;
|
||||
ILogger<FastTunnelServer> _logger;
|
||||
|
||||
public FastTunnelServer(ServerConfig serverSettings, ILogger logger)
|
||||
public FastTunnelServer(ServerConfig serverSettings, ILogger<FastTunnelServer> logger)
|
||||
{
|
||||
_logger = logger;
|
||||
this.serverSettings = serverSettings;
|
||||
|
@ -40,7 +41,7 @@ namespace FastTunnel.Core.Server
|
|||
{
|
||||
var listener = new Listener<object>(serverSettings.BindAddr, serverSettings.BindPort, _logger, ReceiveClient, null);
|
||||
listener.Listen();
|
||||
_logger.Debug($"监听客户端 -> {serverSettings.BindAddr}:{serverSettings.BindPort}");
|
||||
_logger.LogDebug($"监听客户端 -> {serverSettings.BindAddr}:{serverSettings.BindPort}");
|
||||
}
|
||||
|
||||
private void ListenCustomer()
|
||||
|
@ -48,13 +49,13 @@ namespace FastTunnel.Core.Server
|
|||
var listener = new Listener<object>(serverSettings.BindAddr, serverSettings.ProxyPort_HTTP, _logger, ReceiveCustomer, null);
|
||||
listener.Listen();
|
||||
|
||||
_logger.Debug($"监听HTTP -> {serverSettings.BindAddr}:{serverSettings.ProxyPort_HTTP}");
|
||||
_logger.LogDebug($"监听HTTP -> {serverSettings.BindAddr}:{serverSettings.ProxyPort_HTTP}");
|
||||
}
|
||||
|
||||
//接收消息
|
||||
void ReceiveCustomer(Socket client, object _)
|
||||
{
|
||||
_logger.Debug("新的HTTP请求");
|
||||
_logger.LogDebug("新的HTTP请求");
|
||||
|
||||
try
|
||||
{
|
||||
|
@ -73,7 +74,7 @@ namespace FastTunnel.Core.Server
|
|||
}
|
||||
catch (SocketException ex)
|
||||
{
|
||||
_logger.Error(ex);
|
||||
_logger.LogError(ex.Message);
|
||||
if (client.Connected)
|
||||
client.Close();
|
||||
return;
|
||||
|
@ -92,7 +93,7 @@ namespace FastTunnel.Core.Server
|
|||
var collection = Regex.Matches(words, pattern);
|
||||
if (collection.Count == 0)
|
||||
{
|
||||
_logger.Error($"Host异常:{words}");
|
||||
_logger.LogError($"Host异常:{words}");
|
||||
return;
|
||||
}
|
||||
else
|
||||
|
@ -102,18 +103,18 @@ namespace FastTunnel.Core.Server
|
|||
|
||||
var domain = Host.Split(":")[1].Trim();
|
||||
|
||||
_logger.Debug($"Host: {domain}");
|
||||
_logger.LogDebug($"Host: {domain}");
|
||||
|
||||
WebInfo web;
|
||||
if (!WebList.TryGetValue(domain, out web))
|
||||
{
|
||||
_logger.Error($"客户端不存在:'{domain}'");
|
||||
_logger.LogError($"客户端不存在:'{domain}'");
|
||||
return;
|
||||
}
|
||||
|
||||
if (!web.Socket.Connected)
|
||||
{
|
||||
_logger.Error($"客户端已下线:'{domain}'");
|
||||
_logger.LogError($"客户端已下线:'{domain}'");
|
||||
WebList.Remove(domain);
|
||||
return;
|
||||
}
|
||||
|
@ -133,7 +134,7 @@ namespace FastTunnel.Core.Server
|
|||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logger.Error(ex);
|
||||
_logger.LogError(ex);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -150,7 +151,7 @@ namespace FastTunnel.Core.Server
|
|||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logger.Error(ex);
|
||||
_logger.LogError(ex);
|
||||
if (client.Connected)
|
||||
{
|
||||
client.Close();
|
||||
|
@ -162,7 +163,7 @@ namespace FastTunnel.Core.Server
|
|||
string words = Encoding.UTF8.GetString(buffer, 0, length);
|
||||
var msg = JsonConvert.DeserializeObject<Message<object>>(words);
|
||||
|
||||
_logger.Debug($"收到客户端指令:{msg.MessageType}");
|
||||
_logger.LogDebug($"收到客户端指令:{msg.MessageType}");
|
||||
switch (msg.MessageType)
|
||||
{
|
||||
case MessageType.C_LogIn:
|
||||
|
@ -188,7 +189,7 @@ namespace FastTunnel.Core.Server
|
|||
else
|
||||
{
|
||||
// 未找到,关闭连接
|
||||
_logger.Error($"未找到请求:{msgId}");
|
||||
_logger.LogError($"未找到请求:{msgId}");
|
||||
client.Send(new Message<string> { MessageType = MessageType.Error, Content = $"未找到请求:{msgId}" });
|
||||
}
|
||||
break;
|
||||
|
@ -208,14 +209,14 @@ namespace FastTunnel.Core.Server
|
|||
var hostName = $"{item.SubDomain}.{serverSettings.Domain}".Trim();
|
||||
if (WebList.ContainsKey(hostName))
|
||||
{
|
||||
_logger.Debug($"renew domain '{hostName}'");
|
||||
_logger.LogDebug($"renew domain '{hostName}'");
|
||||
|
||||
WebList.Remove(hostName);
|
||||
WebList.Add(hostName, new WebInfo { Socket = client, WebConfig = item });
|
||||
}
|
||||
else
|
||||
{
|
||||
_logger.Debug($"new domain '{hostName}'");
|
||||
_logger.LogDebug($"new domain '{hostName}'");
|
||||
WebList.Add(hostName, new WebInfo { Socket = client, WebConfig = item });
|
||||
}
|
||||
|
||||
|
@ -231,20 +232,20 @@ namespace FastTunnel.Core.Server
|
|||
{
|
||||
if (item.RemotePort.Equals(serverSettings.BindPort))
|
||||
{
|
||||
_logger.Error($"RemotePort can not be same with BindPort: {item.RemotePort}");
|
||||
_logger.LogError($"RemotePort can not be same with BindPort: {item.RemotePort}");
|
||||
continue;
|
||||
}
|
||||
|
||||
if (item.RemotePort.Equals(serverSettings.ProxyPort_HTTP))
|
||||
{
|
||||
_logger.Error($"RemotePort can not be same with ProxyPort_HTTP: {item.RemotePort}");
|
||||
_logger.LogError($"RemotePort can not be same with ProxyPort_HTTP: {item.RemotePort}");
|
||||
continue;
|
||||
}
|
||||
|
||||
SSHInfo<SSHHandlerArg> old;
|
||||
if (SSHList.TryGetValue(item.RemotePort, out old))
|
||||
{
|
||||
_logger.Debug($"Remove Listener {old.Listener.IP}:{old.Listener.Port}");
|
||||
_logger.LogDebug($"Remove Listener {old.Listener.IP}:{old.Listener.Port}");
|
||||
old.Listener.ShutdownAndClose();
|
||||
SSHList.Remove(item.RemotePort);
|
||||
}
|
||||
|
@ -254,12 +255,12 @@ namespace FastTunnel.Core.Server
|
|||
|
||||
// listen success
|
||||
SSHList.Add(item.RemotePort, new SSHInfo<SSHHandlerArg> { Listener = ls, Socket = client, SSHConfig = item });
|
||||
_logger.Debug($"SSH proxy success: {item.RemotePort} -> {item.LocalIp}:{item.LocalPort}");
|
||||
_logger.LogDebug($"SSH proxy success: {item.RemotePort} -> {item.LocalIp}:{item.LocalPort}");
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logger.Error($"SSH proxy error: {item.RemotePort} -> {item.LocalIp}:{item.LocalPort}");
|
||||
_logger.Error(ex);
|
||||
_logger.LogError($"SSH proxy error: {item.RemotePort} -> {item.LocalIp}:{item.LocalPort}");
|
||||
_logger.LogError(ex.Message);
|
||||
client.Send(new Message<string> { MessageType = MessageType.Error, Content = ex.Message });
|
||||
continue;
|
||||
}
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
<PropertyGroup>
|
||||
<OutputType>Exe</OutputType>
|
||||
<TargetFramework>netcoreapp3.1</TargetFramework>
|
||||
|
@ -10,6 +9,9 @@
|
|||
<PackageReference Include="Microsoft.Extensions.Configuration.Binder" Version="3.1.0" />
|
||||
<PackageReference Include="Microsoft.Extensions.Configuration.FileExtensions" Version="3.1.0" />
|
||||
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="3.1.0" />
|
||||
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="3.1.0" />
|
||||
<PackageReference Include="NLog" Version="4.6.8" />
|
||||
<PackageReference Include="NLog.Extensions.Logging" Version="1.6.1" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
@ -20,6 +22,9 @@
|
|||
<None Update="appsettings.json">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</None>
|
||||
<None Update="Nlog.config">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</None>
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
|
|
|
@ -11,34 +11,72 @@ using System.Text;
|
|||
using System.Text.RegularExpressions;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using NLog.Extensions.Logging;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using NLog;
|
||||
using FastTunnel.Core.Config;
|
||||
using FastTunnel.Core.Host;
|
||||
|
||||
namespace FastTunnel.Server
|
||||
{
|
||||
class Program
|
||||
{
|
||||
static Appsettings appsettings;
|
||||
|
||||
static void Main(string[] args)
|
||||
{
|
||||
Console.WriteLine("Server Start!");
|
||||
var logger = LogManager.GetCurrentClassLogger();
|
||||
|
||||
var conf = new ConfigurationBuilder()
|
||||
.SetBasePath(Directory.GetCurrentDirectory())
|
||||
.AddJsonFile("appsettings.json", true, true)
|
||||
.Build();
|
||||
try
|
||||
{
|
||||
var servicesProvider = new Host().Config(Config).Build();
|
||||
Run(servicesProvider);
|
||||
|
||||
var settings = conf.Get<Appsettings>();
|
||||
Run(settings);
|
||||
while (true)
|
||||
{
|
||||
Thread.Sleep(10000 * 60);
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
// NLog: catch any exception and log it.
|
||||
logger.Error(ex, "Stopped program because of exception");
|
||||
throw;
|
||||
}
|
||||
finally
|
||||
{
|
||||
// Ensure to flush and stop internal timers/threads before application-exit (Avoid segmentation fault on Linux)
|
||||
LogManager.Shutdown();
|
||||
}
|
||||
}
|
||||
|
||||
private static void Run(Appsettings settings)
|
||||
private static ServerConfig implementationFactory(IServiceProvider arg)
|
||||
{
|
||||
var logger = new ConsoleLogger();
|
||||
var server = new FastTunnelServer(settings.ServerSettings, logger);
|
||||
server.Run();
|
||||
|
||||
while (true)
|
||||
if (appsettings == null)
|
||||
{
|
||||
Thread.Sleep(10000 * 60);
|
||||
var conf = new ConfigurationBuilder()
|
||||
.SetBasePath(Directory.GetCurrentDirectory())
|
||||
.AddJsonFile("appsettings.json", true, true)
|
||||
.Build();
|
||||
|
||||
appsettings = conf.Get<Appsettings>();
|
||||
}
|
||||
|
||||
return appsettings.ServerSettings;
|
||||
}
|
||||
|
||||
private static void Config(ServiceCollection service)
|
||||
{
|
||||
service.AddTransient<FastTunnelServer>()
|
||||
.AddSingleton<ServerConfig>(implementationFactory);
|
||||
}
|
||||
|
||||
private static void Run(IServiceProvider servicesProvider)
|
||||
{
|
||||
var server = servicesProvider.GetRequiredService<FastTunnelServer>();
|
||||
server.Run();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user