Пример #1
0
        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");
        }
Пример #2
0
        public virtual bool SendPacket(TcpSocketClient tcpClient)
        {
            bool result = tcpClient.SendAsync(Packet, this);

            if (result)
            {
                SendCount++;
            }
            return(result);
        }
Пример #3
0
        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();
        }
Пример #4
0
        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();
        }
Пример #5
0
        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);
        }