private void FirstPacketReadCallback(IAsyncResult asyncResult) { if (asyncResult == null) { return; } TcpStateContainer asyncState = asyncResult.AsyncState as TcpStateContainer; if (asyncState == null) { return; } TcpHost clientMachine = asyncState.Client; byte[] data = asyncState.DataBuffer; try { int numBytes = clientMachine.Stream.EndRead(asyncResult); string stringData = Encoding.UTF8.GetString(data, 0, numBytes); HttpPacket packet = HttpPacketBuilder.BuildPacket(stringData); if (packet == null) { clientMachine.Close(); return; } Host serverMachineHost = packet.IsWebSocketPacket ? _configuration.WebSocketHost : _configuration.HttpHost; if (serverMachineHost != null && serverMachineHost.IsSpecified) { TcpHost serverMachine = TcpHost.ManufactureDefault(serverMachineHost.IpAddress, serverMachineHost.Port); serverMachine.Send(data, numBytes); TcpRoute route = new TcpRoute(clientMachine, serverMachine); _tcpConnectionManager.AddRoute(route); } else { clientMachine.Close(); } } catch (IOException) { } }
void _clientMachine_DataAvailable(TcpHost host, byte[] data, int length) { _serverMachine.Send(data, length); }