public async void ReceiveAsync_Test() { // Arrange var stream = new MemoryStream(100); tcpClientMock.Setup(s => s.Connected).Returns(true); tcpClientMock.Setup(s => s.GetStream).Returns(stream); var socketClient = new TcpSocketClient <Message, Message>(tcpClient, logger); string host = ""; int port = 0; var token = CancellationToken.None; await socketClient.ConnectAsync(host, port, token); var sentMessage = new Message(MessageID.Unknown, 1, new EmptyAnswerPayload()); await socketClient.SendAsync(sentMessage, token); stream.Seek(0, SeekOrigin.Begin); // Act (bool wasReceived, Message message) = await socketClient.ReceiveAsync(token); // Assert Assert.True(wasReceived, "Should receive message"); Assert.True(message.AreAllPropertiesTheSame(sentMessage), "Received message should be the same as sent"); }
public virtual bool SendPacket(TcpSocketClient tcpClient) { bool result = tcpClient.SendAsync(Packet, this); if (result) { SendCount++; } return(result); }
static void Main(string[] args) { var client = new TcpSocketClient("127.0.0.1", 8888); client.OnPipeline(pipeline => { //心跳 //pipeline.AddLast(new IdleStateHandler(5, 0, 0)); //编码解码器 //pipeline.AddLast(new LengthFieldPrepender(2)); //pipeline.AddLast(new LengthFieldBasedFrameDecoder(ushort.MaxValue, 0, 2, 0, 2)); //tls证书 //var cert = new X509Certificate2(Path.Combine(ExampleHelper.ProcessDirectory, "dotnetty.com.pfx"), "password"); //var targetHost = cert.GetNameInfo(X509NameType.DnsName, false); //pipeline.AddLast(new TlsHandler(stream => new SslStream(stream, true, (sender, certificate, chain, errors) => true), new ClientTlsSettings(targetHost))); }); client.OnConnect(() => { Console.WriteLine("OnConnect"); var bytes = Encoding.UTF8.GetBytes("Hello Word"); client.SendAsync(bytes); }); client.OnReceive(bytes => { Console.WriteLine("OnReceive:" + bytes); }); client.OnException(ex => { Console.WriteLine("OnException:" + ex); }); client.OnClose(ex => { Console.WriteLine("OnClose:" + ex); //restart //client.ConnectAsync(); }); client.ConnectAsync(); Console.ReadKey(); }
public void SendPing() { if (tokenSource.IsCancellationRequested) { return; } var pongPacket = Encoding.Default.GetBytes("Ping"); var sendPacket = new byte[pongPacket.Length + 4]; Buffer.BlockCopy(BitConverter.GetBytes(4), 0, sendPacket, 0, 4); Buffer.BlockCopy(pongPacket, 0, sendPacket, 4, pongPacket.Length); client.SendAsync(sendPacket); stopWatch.Reset(); stopWatch.Start(); }
public async void SendAsync_Test() { // Arrange var stream = new MemoryStream(100); tcpClientMock.Setup(s => s.Connected).Returns(true); tcpClientMock.Setup(s => s.GetStream).Returns(stream); var socketClient = new TcpSocketClient <Message, Message>(tcpClient, logger); string host = ""; int port = 0; var token = CancellationToken.None; await socketClient.ConnectAsync(host, port, token); var message = new Message(MessageID.Unknown, 1, new EmptyAnswerPayload()); // Act await socketClient.SendAsync(message, token); // Assert stream.Seek(0, SeekOrigin.Begin); int lengthBytesCount = 2; var lengthBuffer = new byte[lengthBytesCount]; int bytesRead = await stream.ReadAsync(lengthBuffer, 0, lengthBytesCount); Assert.Equal(lengthBytesCount, bytesRead); string serializedMessage = JsonConvert.SerializeObject(message); int readLength = lengthBuffer.ToInt16(); Assert.Equal(serializedMessage.Length, readLength); var buffer = new byte[readLength]; bytesRead = await stream.ReadAsync(buffer, 0, readLength); Assert.Equal(bytesRead, readLength); var msgString = Encoding.UTF8.GetString(buffer, 0, readLength); Assert.Equal(serializedMessage, msgString); }