diff --git a/.gitignore b/.gitignore
index 25f8706..8dbea78 100644
--- a/.gitignore
+++ b/.gitignore
@@ -7,3 +7,6 @@ obj
/FastTunnel.Server/Properties/PublishProfiles/*.user
/FastTunnel.Client/Properties/PublishProfiles/*.pubxml
publish
+/SuiDao.Client/Properties/PublishProfiles/*.user
+/SuiDao.Client/*.user
+/SuiDao.Client/Properties/PublishProfiles/FolderProfile.pubxml
diff --git a/FastTunnel.Client/Appsettings.cs b/FastTunnel.Client/Appsettings.cs
index 63c3286..89d1721 100644
--- a/FastTunnel.Client/Appsettings.cs
+++ b/FastTunnel.Client/Appsettings.cs
@@ -1,5 +1,4 @@
-using FastTunnel.Core.Client;
-using FastTunnel.Core.Config;
+using FastTunnel.Core.Config;
using System;
using System.Collections.Generic;
using System.Linq;
diff --git a/FastTunnel.Client/Nlog.config b/FastTunnel.Client/Nlog.config
index b7bc808..bf183f2 100644
--- a/FastTunnel.Client/Nlog.config
+++ b/FastTunnel.Client/Nlog.config
@@ -8,7 +8,7 @@
fileName="${basedir}/Logs/${shortdate}.${level}.log" />
+ layout="${date}|${level:uppercase=true}|${message} ${exception} ${all-event-properties}" />
diff --git a/FastTunnel.Client/Program.cs b/FastTunnel.Client/Program.cs
index 5ade349..7ccb556 100644
--- a/FastTunnel.Client/Program.cs
+++ b/FastTunnel.Client/Program.cs
@@ -1,7 +1,6 @@
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using FastTunnel.Core;
-using FastTunnel.Core.Client;
using System;
using System.IO;
using System.Net;
@@ -12,6 +11,8 @@ using System.Threading.Tasks;
using NLog;
using FastTunnel.Core.Host;
using FastTunnel.Core.Config;
+using FastTunnel.Core.Core;
+using FastTunnel.Core.Models;
namespace FastTunnel.Client
{
@@ -52,7 +53,36 @@ namespace FastTunnel.Client
var client = servicesProvider.GetRequiredService();
var config = servicesProvider.GetRequiredService();
client.SetConfig(config);
- client.Login();
+
+ client.Login(() =>
+ {
+ Connecter _client;
+
+ try
+ {
+ // 连接到的目标IP
+ _client = new Connecter(config.Common.ServerAddr, config.Common.ServerPort);
+ _client.Connect();
+ }
+ catch (Exception ex)
+ {
+ Thread.Sleep(5000);
+ throw;
+ }
+
+ // 登录
+ _client.Send(new Message
+ {
+ MessageType = MessageType.C_LogIn,
+ Content = new LogInRequest
+ {
+ Webs = config.Webs,
+ SSH = config.SSH
+ }
+ });
+
+ return _client;
+ });
while (true)
{
diff --git a/FastTunnel.Client/appsettings.json b/FastTunnel.Client/appsettings.json
index 90b64c2..7b59a0d 100644
--- a/FastTunnel.Client/appsettings.json
+++ b/FastTunnel.Client/appsettings.json
@@ -9,9 +9,9 @@
"ClientSettings": {
"Common": {
// 服务端公网ip, 对应服务端配置文件的 BindAddr
- "ServerAddr": "45.132.12.57",
+ //"ServerAddr": "45.132.12.57",
- //"ServerAddr": "127.0.0.1",
+ "ServerAddr": "127.0.0.1",
// 服务端通信端口,对应服务端配置文件的 BindPort
"ServerPort": 1271
diff --git a/FastTunnel.Core/Config/ClientConfig.cs b/FastTunnel.Core/Config/ClientConfig.cs
index 40ec381..96f0c85 100644
--- a/FastTunnel.Core/Config/ClientConfig.cs
+++ b/FastTunnel.Core/Config/ClientConfig.cs
@@ -7,10 +7,17 @@ namespace FastTunnel.Core.Config
{
public class ClientConfig
{
- public FastTunnelServer Common { get; set; }
+ public SuiDaoServer Common { get; set; }
public IEnumerable Webs { get; set; }
public IEnumerable SSH { get; set; }
}
-}
+
+ public class SuiDaoServer
+ {
+ public string ServerAddr { get; set; }
+
+ public int ServerPort { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/FastTunnel.Core/Client/SuiDaoClient.cs b/FastTunnel.Core/Core/SuiDaoClient.cs
similarity index 86%
rename from FastTunnel.Core/Client/SuiDaoClient.cs
rename to FastTunnel.Core/Core/SuiDaoClient.cs
index 473e7d8..e86250e 100644
--- a/FastTunnel.Core/Client/SuiDaoClient.cs
+++ b/FastTunnel.Core/Core/SuiDaoClient.cs
@@ -13,7 +13,7 @@ using System.Timers;
using System.Threading;
using Microsoft.Extensions.Logging;
-namespace FastTunnel.Core.Client
+namespace FastTunnel.Core.Core
{
public class FastTunnelClient
{
@@ -26,6 +26,7 @@ namespace FastTunnel.Core.Client
System.Timers.Timer timer_timeout;
System.Timers.Timer timer_heart;
+ Func login;
double heartInterval = 5000;
DateTime lastHeart;
Thread th;
@@ -69,7 +70,8 @@ namespace FastTunnel.Core.Client
private void reConnect()
{
Close();
- Login();
+ _client = login.Invoke();
+ LogSuccess(_client.Socket);
}
private void HeartElapsed(object sender, ElapsedEventArgs e)
@@ -84,6 +86,13 @@ namespace FastTunnel.Core.Client
}
}
+ public void Login(Func fun)
+ {
+ login = fun;
+ _client = login.Invoke();
+ LogSuccess(_client.Socket);
+ }
+
void Close()
{
timer_heart.Stop();
@@ -112,37 +121,16 @@ namespace FastTunnel.Core.Client
_clientConfig = config;
}
- public void Login()
+ private void LogSuccess(Socket socket)
{
- _logger.LogDebug("FastTunnel Client Start");
- _logger.LogDebug("登录中...");
-
- //连接到的目标IP
- try
- {
- _client = new Connecter(_clientConfig.Common.ip, _clientConfig.Common.bind_port);
- _client.Connect();
- }
- catch (Exception ex)
- {
- _logger.LogError(ex.Message);
- _client.Socket.Close();
-
- Thread.Sleep(5000);
- Login();
- return;
- }
-
- // 登录
- _client.Send(new Message { MessageType = MessageType.C_LogIn, Content = new LogInRequest { ClientConfig = _clientConfig } });
- _logger.LogDebug("登录成功");
+ _logger.LogDebug("通信已建立");
// 心跳开始
timer_heart.Start();
timer_timeout.Start();
th = new Thread(ReceiveServer);
- th.Start(_client.Socket);
+ th.Start(socket);
}
private void ReceiveServer(object obj)
@@ -217,7 +205,7 @@ namespace FastTunnel.Core.Client
break;
case MessageType.S_NewCustomer:
var request = (Msg.Content as JObject).ToObject();
- var connecter = new Connecter(_clientConfig.Common.ip, _clientConfig.Common.bind_port);
+ var connecter = new Connecter(_clientConfig.Common.ServerAddr, _clientConfig.Common.ServerPort);
connecter.Connect();
connecter.Send(new Message { MessageType = MessageType.C_SwapMsg, Content = request.MsgId });
@@ -228,7 +216,7 @@ namespace FastTunnel.Core.Client
break;
case MessageType.S_NewSSH:
var request_ssh = (Msg.Content as JObject).ToObject();
- var connecter_ssh = new Connecter(_clientConfig.Common.ip, _clientConfig.Common.bind_port);
+ var connecter_ssh = new Connecter(_clientConfig.Common.ServerAddr, _clientConfig.Common.ServerPort);
connecter_ssh.Connect();
connecter_ssh.Send(new Message { MessageType = MessageType.C_SwapMsg, Content = request_ssh.MsgId });
@@ -239,15 +227,15 @@ namespace FastTunnel.Core.Client
break;
case MessageType.Info:
var info = Msg.Content.ToJson();
- _logger.LogInformation(info);
+ _logger.LogInformation("From Server:" + info);
break;
case MessageType.LogDebug:
var LogDebug = Msg.Content.ToJson();
- _logger.LogDebug(LogDebug);
+ _logger.LogDebug("From Server:" + LogDebug);
break;
case MessageType.Error:
var err = Msg.Content.ToJson();
- _logger.LogError(err);
+ _logger.LogError("From Server:" + err);
break;
case MessageType.C_SwapMsg:
case MessageType.C_LogIn:
diff --git a/FastTunnel.Core/Server/SuiDaoServer.cs b/FastTunnel.Core/Core/SuiDaoServer.cs
similarity index 82%
rename from FastTunnel.Core/Server/SuiDaoServer.cs
rename to FastTunnel.Core/Core/SuiDaoServer.cs
index 47fa077..3c643b7 100644
--- a/FastTunnel.Core/Server/SuiDaoServer.cs
+++ b/FastTunnel.Core/Core/SuiDaoServer.cs
@@ -12,8 +12,9 @@ using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using Microsoft.Extensions.Logging;
+using FastTunnel.Core.Handlers;
-namespace FastTunnel.Core.Server
+namespace FastTunnel.Core.Core
{
public class FastTunnelServer
{
@@ -21,13 +22,15 @@ namespace FastTunnel.Core.Server
Dictionary> SSHList = new Dictionary>();
Dictionary newRequest = new Dictionary();
- private ServerConfig serverSettings;
+ private ServerConfig _serverSettings;
ILogger _logger;
+ ILoginHandler _loginHandler;
- public FastTunnelServer(ServerConfig serverSettings, ILogger logger)
+ public FastTunnelServer(ServerConfig settings, ILogger logger, ILoginHandler loginHandler)
{
+ _serverSettings = settings;
_logger = logger;
- this.serverSettings = serverSettings;
+ _loginHandler = loginHandler;
}
public void Run()
@@ -39,17 +42,17 @@ namespace FastTunnel.Core.Server
private void ListenFastTunnelClient()
{
- var listener = new Listener