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(); }
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; }
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); }
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; }
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()); }