mirror of
https://github.com/FastTunnel/FastTunnel.git
synced 2025-02-08 02:39:29 +08:00
=。=
This commit is contained in:
parent
dc11b4efce
commit
e21b09edf0
|
@ -97,7 +97,7 @@ namespace FastTunnel.Client
|
|||
service.AddSingleton<FastTunnelClient>()
|
||||
.AddSingleton<ClientHeartHandler>()
|
||||
.AddSingleton<LogHandler>()
|
||||
.AddSingleton<NewCustomerHandler>()
|
||||
.AddSingleton<HttpRequestHandler>()
|
||||
.AddSingleton<NewSSHHandler>()
|
||||
.AddSingleton<ClientConfig>(implementationFactory);
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue
Block a user