public void EstablishedSession_ReceivesData_ShouldTriggerEventOnSession() { var networkLayer = new ServerTestNetworkLinkLayer(); var server = new TestPollingServer(networkLayer); var serverOnFrameReceived = new List <ClientDataFrame>(); server.Start(); var session = ConnectionHelper.WaitForClientSession(server, networkLayer, this.initConnectionFrame); session.FrameReceived += (sender, args) => serverOnFrameReceived.Add(args.Frame); // Find out the ClientId Assert.IsTrue(networkLayer.SentBytes.Any(), "There should be at least one captured frame"); var sentFrameBytes = networkLayer.SentBytes[0]; var sentFrame = new GenericSerializer <ServerDataFrame>().Deserialze(sentFrameBytes); Assert.IsNotNull(sentFrame); Assert.IsTrue(sentFrame.SequenceId != 0); Assert.IsNotNull(sentFrame.Payload); Assert.AreNotEqual(0, BitConverter.ToInt32(sentFrame.Payload, 0)); var clientId = BitConverter.ToInt32(sentFrame.Payload, 0); var clientFrame = new ClientDataFrame() { ClientId = clientId, SequenceId = initConnectionFrame.SequenceId + 1, Payload = Encoding.UTF8.GetBytes("Hello World") }; networkLayer.Receive(new GenericSerializer <ClientDataFrame>().Serialize(clientFrame)); Assert.AreEqual(1, serverOnFrameReceived.Count); Assert.AreEqual("Hello World", Encoding.UTF8.GetString(serverOnFrameReceived[0].Payload)); }
internal static PollingClientSession <ClientDataFrame, ServerDataFrame> WaitForClientSession(TestPollingServer server, ServerTestNetworkLinkLayer networkLayer, ClientDataFrame initConnectionFrame) { PollingClientSession <ClientDataFrame, ServerDataFrame> session = null; var resetEvent = new AutoResetEvent(false); var t = new Task(() => { session = server.Accept(); resetEvent.Set(); }); t.Start(); while (!resetEvent.WaitOne(10)) { networkLayer.Receive(new BinaryClientFrameEncoder().Encode((ClientDataFrame)initConnectionFrame)); } return(session); }