Browse Source

decouple TCPHandler and statistic

tags/4.2.0.0
Student Main 5 years ago
parent
commit
b753092144
1 changed files with 12 additions and 15 deletions
  1. +12
    -15
      shadowsocks-csharp/Controller/Service/TCPRelay.cs

+ 12
- 15
shadowsocks-csharp/Controller/Service/TCPRelay.cs View File

@@ -39,7 +39,15 @@ namespace Shadowsocks.Controller
|| (length < 2 || firstPacket[0] != 5))
return false;
socket.SetSocketOption(SocketOptionLevel.Tcp, SocketOptionName.NoDelay, true);
TCPHandler handler = new TCPHandler(_controller, _config, this, socket);
TCPHandler handler = new TCPHandler(_controller, _config, socket);
handler.OnConnected += (_, arg) => UpdateLatency(arg.server, arg.latency);
handler.OnInbound += (_, arg) => UpdateInboundCounter(arg.server, arg.length);
handler.OnOutbound += (_, arg) => UpdateOutboundCounter(arg.server, arg.length);
handler.OnClosed += (_, arg) =>
{
lock (Handlers) { Handlers.Remove(arg.handler); }
};
IList<TCPHandler> handlersToClose = new List<TCPHandler>();
lock (Handlers)
@@ -93,6 +101,8 @@ namespace Shadowsocks.Controller
public void UpdateLatency(Server server, TimeSpan latency)
{
IStrategy strategy = _controller.GetCurrentStrategy();
strategy?.UpdateLatency(server, latency);
_controller.UpdateLatency(server, latency);
}
}
@@ -199,7 +209,6 @@ namespace Shadowsocks.Controller
private ShadowsocksController _controller;
private Configuration _config;
private TCPRelay _tcprelay;
private Socket _connection;
private IEncryptor _encryptor;
@@ -251,11 +260,10 @@ namespace Shadowsocks.Controller
private EndPoint _destEndPoint = null;
public TCPHandler(ShadowsocksController controller, Configuration config, TCPRelay tcprelay, Socket socket)
public TCPHandler(ShadowsocksController controller, Configuration config, Socket socket)
{
_controller = controller;
_config = config;
_tcprelay = tcprelay;
_connection = socket;
_proxyTimeout = config.proxy.proxyTimeout * 1000;
_serverTimeout = config.GetCurrentServer().timeout * 1000;
@@ -302,10 +310,6 @@ namespace Shadowsocks.Controller
OnClosed?.Invoke(this, new SSTCPClosedEventArgs(_server, this));
lock (_tcprelay.Handlers)
{
_tcprelay.Handlers.Remove(this);
}
try
{
_connection.Shutdown(SocketShutdown.Both);
@@ -815,10 +819,6 @@ namespace Shadowsocks.Controller
OnConnected?.Invoke(this, new SSTCPConnectedEventArgs(_server, latency));
IStrategy strategy = _controller.GetCurrentStrategy();
strategy?.UpdateLatency(_server, latency);
_tcprelay.UpdateLatency(_server, latency);
StartPipe(session);
}
catch (ArgumentException)
@@ -878,8 +878,6 @@ namespace Shadowsocks.Controller
_totalRead += bytesRead;
OnInbound?.Invoke(this, new SSInboundEventArgs(_server, bytesRead));
_tcprelay.UpdateInboundCounter(_server, bytesRead);
if (bytesRead > 0)
{
lastActivity = DateTime.Now;
@@ -972,7 +970,6 @@ namespace Shadowsocks.Controller
}
OnOutbound?.Invoke(this, new SSOutboundEventArgs(_server, bytesToSend));
_tcprelay.UpdateOutboundCounter(_server, bytesToSend);
_startSendingTime = DateTime.Now;
session.Remote.BeginSend(_connetionSendBuffer, 0, bytesToSend, SocketFlags.None,
PipeRemoteSendCallback, new object[] { session, bytesToSend });


Loading…
Cancel
Save