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);
                        }
                    }
                });
            }
Example #2
0
        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();
        }
Example #3
0
 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;
 }
Example #5
0
 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;
 }