コード例 #1
0
        private static void Main(string[] args)
        {
            if (args.Length != 3)
            {
                args = new[] { "10.0.0.1", "11501", "config.xml" };
                ///Console.WriteLine("Please provide two command line arguments:");
                ///Console.WriteLine("- ip address, for example: 10.1.2.3");
                ///Console.WriteLine("- port, for example: 11051");
                ///Console.WriteLine("- config file, for example: \"c:\\temp\\config.xml\"");
                ///return;
            }

            IPEndPoint ipep;

            try
            {
                ipep = new IPEndPoint(IPAddress.Parse(args[0]), Int32.Parse(args[1]));
            }
            catch
            {
                Console.WriteLine("No valid ip and port provided for listener");
                return;
            }

            if (!File.Exists(args[2]))
            {
                Console.WriteLine("Could not load config file " + args[2]);
                return;
            }
            var serializer = new XmlSerializer(typeof(TLCFIExerciserSetup));
            TLCFIExerciserSetup exerciserSetup = null;

            try
            {
                using (var reader = new StreamReader(args[2]))
                {
                    exerciserSetup = (TLCFIExerciserSetup)serializer.Deserialize(reader);
                }
            }
            catch (Exception e)
            {
                Console.WriteLine("Could not properly deserialize config file: " + e);
                return;
            }

            Console.WriteLine("TLCFI.NET exerciser all set up; now listening at {0}:{1}. Press any key to exit.", args[0], args[1]);

            Listener = new TcpListener(ipep);
            Listener.Start();
            var tcpclient = Listener.AcceptTcpClient();
            var client    = new TwoWayTcpClient(tcpclient);
            var exerciser = new TLCFIExerciser(client, exerciserSetup);

            Console.ReadKey();
        }
コード例 #2
0
        public TLCFIExerciser(TwoWayTcpClient client, TLCFIExerciserSetup setup)
        {
            _client = client;
            _setup  = setup;

            var id = 0;

            _aliveTimer = new Timer(async state =>
            {
                await _client.SendDataAsync("{\"id\":" + id++ + ",\"jsonrpc\":\"2.0\"," +
                                            "\"method\":\"Alive\",\"params\":{\"ticks\":" + CurrentTicks + ",\"time\":" + CurrentTime + "}}", CancellationToken.None);
            }, null, 2000, 2000);

            _client.DataReceived += ProcessReceivedData;
        }
コード例 #3
0
 public TLCFIClientSessionJsonRpcHandler(
     TLCFIClientStateManager stateManager,
     TLCProxy tlcProxy,
     TLCFIClientSessionState sessionState,
     TwoWayTcpClient tcpClient,
     CancellationToken token)
 {
     _stateManager             = stateManager;
     _tlcProxy                 = tlcProxy;
     _sessionCancellationToken = token;
     tcpClient.DataReceived   += async(o, e) =>
     {
         if (!_jsonRpcMethodRegex.IsMatch(e))
         {
             return;
         }
         var result = _service?.HandleRpc(e);
         if (result != null)
         {
             await tcpClient.SendDataAsync(result, token);
         }
     };
     _service = JsonRpcProcedureBinder.Default.GetInstanceService(this);
 }
コード例 #4
0
        public TLCFIClientSession(TLCFIClientStateManager stateManager, IPEndPoint ep, CancellationToken token)
        {
            _endPoint = ep;
            _sessionCancellationToken = token;
            _stateManager             = stateManager;

            Client               = new TwoWayTcpClient();
            Client.DataSent     += (o, e) => { DataSent?.Invoke(this, e); };
            Client.Disconnected += Client_Disconnected;

            RemoteEndPoint = ep;

            State = new TLCFIClientSessionState();

            TLCProxy        = new TLCProxy(Client);
            _jsonRpcHandler = new TLCFIClientSessionJsonRpcHandler(stateManager, TLCProxy, State, Client, token);
            _jsonRpcHandler.ReceivedAlive += (o, a) =>
            {
                _aliveReceivedTimer.Stop();
                _aliveReceivedTimer.Start();
            };
            _jsonRpcHandler.UpdateStateCalled += OnUpdateStateCalled;
            _jsonRpcHandler.NotifyEventCalled += OnNotifyEventCalled;
        }
コード例 #5
0
 public TLCProxy(TwoWayTcpClient client)
 {
     Client = client;
     _rpcClient.TcpClient = Client;
     Client.DataReceived += _rpcClient.HandleDataReceived;
 }
        public void ClientConnected_SendAndReceivesInSeperateThreads_AllDataTransfered()
        {
            var listener = new TcpListener(IPAddress.Parse("127.0.0.1"), 53872);

            listener.Start();
            var tcpclient = new TcpClient();

            tcpclient.Connect("127.0.0.1", 53872);
            var client   = new TwoWayTcpClient(tcpclient);
            var received = new StringBuilder();
            var sent     = new StringBuilder();

            client.DataReceived += (s, e) =>
            {
                received.Append(e);
            };
            var client2 = listener.AcceptTcpClient();

            client2.ReceiveBufferSize = 32768;
            client2.SendBufferSize    = 32768;

            var t1 = new Thread(async() =>
            {
                for (int i = 0; i < 10; ++i)
                {
                    Thread.Sleep(25);
                    await client.SendDataAsync("{test" + i + "}\n", CancellationToken.None);
                }
            });
            var t2 = new Thread(() =>
            {
                using (var nstr = client2.GetStream())
                {
                    using (var strw = new StreamWriter(nstr))
                    {
                        strw.AutoFlush = true;
                        using (var strr = new StreamReader(nstr))
                        {
                            for (int i = 0; i < 10; ++i)
                            {
                                Thread.Sleep(25);
                                strw.Write("{test" + i + "}");
                                sent.Append(strr.ReadLine());
                            }
                        }
                    }
                }
            });

            t1.Start();
            t2.Start();
            Thread.Sleep(500);
            client2.Close();
            client.Dispose();

            var result = "";

            for (int i = 0; i < 10; ++i)
            {
                result = result + ("{test" + i) + "}";
            }
            Assert.AreEqual(result, received.ToString());
            Assert.AreEqual(result, sent.ToString());
        }