public Connection(TcpRpcServer server, TcpClient client, FramePump pump, OutboundTcpEndpoint outboundEp, RpcEngine.RpcEndpoint inboundEp) { Client = client; Pump = pump; OutboundEp = outboundEp; InboundEp = inboundEp; PumpRunner = new Thread(o => { try { Thread.CurrentThread.Name = $"TCP RPC Server Thread {Thread.CurrentThread.ManagedThreadId}"; Pump.Run(); } finally { OutboundEp.Dismiss(); InboundEp.Dismiss(); Pump.Dispose(); lock (server._reentrancyBlocker) { --server.ConnectionCount; server._connections.Remove(this); } } }); }
async Task Connect(string host, int port) { await ConnectAsync(host, port); _pump = new FramePump(_client.GetStream()); _outboundEndpoint = new OutboundTcpEndpoint(this, _pump); _inboundEndpoint = _rpcEngine.AddEndpoint(_outboundEndpoint); _pumpThread = new Thread(() => { try { Thread.CurrentThread.Name = $"TCP RPC Client Thread {Thread.CurrentThread.ManagedThreadId}"; _pump.Run(); } finally { _outboundEndpoint.Dismiss(); _inboundEndpoint.Dismiss(); _pump.Dispose(); } }); _pump.FrameReceived += _inboundEndpoint.Forward; _pumpThread.Start(); }
public Connection(TcpRpcServer server, TcpClient client, FramePump pump, OutboundTcpEndpoint outboundEp, RpcEngine.RpcEndpoint inboundEp) { _server = server; Client = client; Pump = pump; OutboundEp = outboundEp; InboundEp = inboundEp; }
public EnginePair() { Engine1 = new RpcEngine(); Engine2 = new RpcEngine(); _channel1 = new EngineChannel(); Endpoint1 = Engine1.AddEndpoint(_channel1); _channel2 = new EngineChannel(); Endpoint2 = Engine2.AddEndpoint(_channel2); _channel1.OtherEndpoint = Endpoint2; _channel2.OtherEndpoint = Endpoint1; }
public EnginePair(DecisionTree decisionTree) { _decisionTree = decisionTree; Engine1 = new RpcEngine(); Engine2 = new RpcEngine(); _channel1 = new EngineChannel(decisionTree.MakeDecision); Endpoint1 = Engine1.AddEndpoint(_channel1); _channel2 = new EngineChannel(() => false); Endpoint2 = Engine2.AddEndpoint(_channel2); _channel1.OtherEndpoint = Endpoint2; _channel2.OtherEndpoint = Endpoint1; }