This commit is contained in:
SpringHgui 2020-10-27 09:18:18 +08:00
parent dc11b4efce
commit e21b09edf0
6 changed files with 40 additions and 31 deletions

View File

@ -97,7 +97,7 @@ namespace FastTunnel.Client
service.AddSingleton<FastTunnelClient>()
.AddSingleton<ClientHeartHandler>()
.AddSingleton<LogHandler>()
.AddSingleton<NewCustomerHandler>()
.AddSingleton<HttpRequestHandler>()
.AddSingleton<NewSSHHandler>()
.AddSingleton<ClientConfig>(implementationFactory);
}

View File

@ -3,6 +3,7 @@ using System.Collections.Generic;
using System.Net.Sockets;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace FastTunnel.Core
{
@ -12,19 +13,22 @@ namespace FastTunnel.Core
private Socket m_sockt2;
bool m_swaping = false;
private class Channel
{
public Socket Send { get; set; }
public Socket Receive { get; set; }
}
public AsyncSocketSwap(Socket sockt1, Socket sockt2)
{
m_sockt1 = sockt1;
m_sockt2 = sockt2;
}
public void StartSwap()
public AsyncSocketSwap BeforeSwap(Action fun)
{
if (m_swaping)
throw new Exception("BeforeSwap must be invoked before StartSwap!");
fun?.Invoke();
return this;
}
private void StartSwap()
{
m_swaping = true;
@ -37,6 +41,21 @@ namespace FastTunnel.Core
rcv2.ReciveOne();
}
public void StartSwapAsync()
{
Task.Run(() =>
{
try
{
StartSwap();
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
});
}
private void Rcv1_OnComplete(DataReciver send, byte[] buffer, int index, int count)
{
m_sockt2.Send(buffer, index, count, SocketFlags.None);
@ -48,16 +67,5 @@ namespace FastTunnel.Core
m_sockt1.Send(buffer, index, count, SocketFlags.None);
send.ReciveOne();
}
internal AsyncSocketSwap BeforeSwap(Action fun)
{
if (m_swaping)
{
throw new Exception("BeforeSwap must be invoked before StartSwap!");
}
fun?.Invoke();
return this;
}
}
}

View File

@ -33,12 +33,16 @@ namespace FastTunnel.Core.Core
Thread th;
int reTrySpan = 30 * 1000; // 登陆失败后重试间隔
NewCustomerHandler _newCustomerHandler;
HttpRequestHandler _newCustomerHandler;
NewSSHHandler _newSSHHandler;
LogHandler _logHandler;
ClientHeartHandler _clientHeartHandler;
public FastTunnelClient(ILogger<FastTunnelClient> logger, NewCustomerHandler newCustomerHandler, NewSSHHandler newSSHHandler, LogHandler logHandler, ClientHeartHandler clientHeartHandler)
public FastTunnelClient(
ILogger<FastTunnelClient> logger,
HttpRequestHandler newCustomerHandler,
NewSSHHandler newSSHHandler, LogHandler logHandler,
ClientHeartHandler clientHeartHandler)
{
_logger = logger;
_newCustomerHandler = newCustomerHandler;

View File

@ -12,7 +12,7 @@ using System.Threading.Tasks;
namespace FastTunnel.Core.Handlers.Client
{
public class NewCustomerHandler : IClientHandler
public class HttpRequestHandler : IClientHandler
{
public void HandlerMsg(FastTunnelClient cleint, Message<JObject> Msg)
{
@ -58,7 +58,7 @@ namespace FastTunnel.Core.Handlers.Client
throw;
}
new AsyncSocketSwap(connecter.Socket, localConnecter.Socket).StartSwap();
new AsyncSocketSwap(connecter.Socket, localConnecter.Socket).StartSwapAsync();
}
}
}

View File

@ -20,7 +20,7 @@ namespace FastTunnel.Core.Handlers.Client
var localConnecter_ssh = new Connecter(request_ssh.SSHConfig.LocalIp, request_ssh.SSHConfig.LocalPort, 5000);
localConnecter_ssh.Connect();
new AsyncSocketSwap(connecter_ssh.Socket, localConnecter_ssh.Socket).StartSwap();
new AsyncSocketSwap(connecter_ssh.Socket, localConnecter_ssh.Socket).StartSwapAsync();
}
}
}

View File

@ -30,12 +30,9 @@ namespace FastTunnel.Core.Handlers.Server
if (!string.IsNullOrEmpty(SwapMsg.msgId) && server.newRequest.TryGetValue(SwapMsg.msgId, out request))
{
// Join
Task.Run(() =>
{
(new AsyncSocketSwap(request.CustomerClient, client))
.BeforeSwap(() => { if (request.Buffer != null) client.Send(request.Buffer); })
.StartSwap();
});
new AsyncSocketSwap(request.CustomerClient, client)
.BeforeSwap(() => { if (request.Buffer != null) client.Send(request.Buffer); })
.StartSwapAsync();
}
else
{