public void WrittenBuffersEquals()
        {
            //XXX Same tests than testEquals with written AggregateChannelBuffers
            // Different length.
            IByteBuffer a = Unpooled.WrappedBuffer(new byte[] { 1 });
            IByteBuffer b = Unpooled.WrappedBuffer(Unpooled.WrappedBuffer(new byte[] { 1 }, new byte[1]));
            IByteBuffer c = Unpooled.WrappedBuffer(new byte[] { 2 });

            // to enable writeBytes
            b.SetWriterIndex(b.WriterIndex - 1);
            b.WriteBytes(c);
            Assert.False(ByteBufferUtil.Equals(a, b));

            a.Release();
            b.Release();
            c.Release();

            // Same content, same firstIndex, short length.
            a = Unpooled.WrappedBuffer(new byte[] { 1, 2, 3 });
            b = Unpooled.WrappedBuffer(Unpooled.WrappedBuffer(new byte[] { 1 }, new byte[2]));
            c = Unpooled.WrappedBuffer(new byte[] { 2 });

            // to enable writeBytes
            b.SetWriterIndex(b.WriterIndex - 2);
            b.WriteBytes(c);
            c.Release();
            c = Unpooled.WrappedBuffer(new byte[] { 3 });

            b.WriteBytes(c);
            Assert.True(ByteBufferUtil.Equals(a, b));

            a.Release();
            b.Release();
            c.Release();

            // Same content, different firstIndex, short length.
            a = Unpooled.WrappedBuffer(new byte[] { 1, 2, 3 });
            b = Unpooled.WrappedBuffer(Unpooled.WrappedBuffer(new byte[] { 0, 1, 2, 3, 4 }, 1, 3));
            c = Unpooled.WrappedBuffer(new byte[] { 0, 1, 2, 3, 4 }, 3, 1);
            // to enable writeBytes
            b.SetWriterIndex(b.WriterIndex - 1);
            b.WriteBytes(c);
            Assert.True(ByteBufferUtil.Equals(a, b));

            a.Release();
            b.Release();
            c.Release();

            // Different content, same firstIndex, short length.
            a = Unpooled.WrappedBuffer(new byte[] { 1, 2, 3 });
            b = Unpooled.WrappedBuffer(Unpooled.WrappedBuffer(new byte[] { 1, 2 }, new byte[1]));
            c = Unpooled.WrappedBuffer(new byte[] { 4 });
            // to enable writeBytes
            b.SetWriterIndex(b.WriterIndex - 1);
            b.WriteBytes(c);
            Assert.False(ByteBufferUtil.Equals(a, b));

            a.Release();
            b.Release();
            c.Release();

            // Different content, different firstIndex, short length.
            a = Unpooled.WrappedBuffer(new byte[] { 1, 2, 3 });
            b = Unpooled.WrappedBuffer(Unpooled.WrappedBuffer(new byte[] { 0, 1, 2, 4, 5 }, 1, 3));
            c = Unpooled.WrappedBuffer(new byte[] { 0, 1, 2, 4, 5 }, 3, 1);
            // to enable writeBytes
            b.SetWriterIndex(b.WriterIndex - 1);
            b.WriteBytes(c);
            Assert.False(ByteBufferUtil.Equals(a, b));

            a.Release();
            b.Release();
            c.Release();

            // Same content, same firstIndex, long length.
            a = Unpooled.WrappedBuffer(new byte[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 });
            b = Unpooled.WrappedBuffer(Unpooled.WrappedBuffer(new byte[] { 1, 2, 3 }, new byte[7]));
            c = Unpooled.WrappedBuffer(new byte[] { 4, 5, 6 });

            // to enable writeBytes
            b.SetWriterIndex(b.WriterIndex - 7);
            b.WriteBytes(c);
            c.Release();
            c = Unpooled.WrappedBuffer(new byte[] { 7, 8, 9, 10 });
            b.WriteBytes(c);
            Assert.True(ByteBufferUtil.Equals(a, b));

            a.Release();
            b.Release();
            c.Release();

            // Same content, different firstIndex, long length.
            a = Unpooled.WrappedBuffer(new byte[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 });
            b = Unpooled.WrappedBuffer(
                Unpooled.WrappedBuffer(new byte[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 }, 1, 10));
            c = Unpooled.WrappedBuffer(new byte[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 }, 6, 5);
            // to enable writeBytes
            b.SetWriterIndex(b.WriterIndex - 5);
            b.WriteBytes(c);
            Assert.True(ByteBufferUtil.Equals(a, b));

            a.Release();
            b.Release();
            c.Release();

            // Different content, same firstIndex, long length.
            a = Unpooled.WrappedBuffer(new byte[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 });
            b = Unpooled.WrappedBuffer(Unpooled.WrappedBuffer(new byte[] { 1, 2, 3, 4, 6 }, new byte[5]));
            c = Unpooled.WrappedBuffer(new byte[] { 7, 8, 5, 9, 10 });
            // to enable writeBytes
            b.SetWriterIndex(b.WriterIndex - 5);
            b.WriteBytes(c);
            Assert.False(ByteBufferUtil.Equals(a, b));

            a.Release();
            b.Release();
            c.Release();

            // Different content, different firstIndex, long length.
            a = Unpooled.WrappedBuffer(new byte[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 });
            b = Unpooled.WrappedBuffer(
                Unpooled.WrappedBuffer(new byte[] { 0, 1, 2, 3, 4, 6, 7, 8, 5, 9, 10, 11 }, 1, 10));
            c = Unpooled.WrappedBuffer(new byte[] { 0, 1, 2, 3, 4, 6, 7, 8, 5, 9, 10, 11 }, 6, 5);
            // to enable writeBytes
            b.SetWriterIndex(b.WriterIndex - 5);
            b.WriteBytes(c);
            Assert.False(ByteBufferUtil.Equals(a, b));

            a.Release();
            b.Release();
            c.Release();
        }
Esempio n. 2
0
 public override IByteBuffer EncodePayload()
 {
     return(Unpooled.WrappedBuffer(AudioData));
 }
        async Task RunMqttClientScenarioAsync(IChannel channel, ReadListeningHandler readListener)
        {
            await channel.WriteAndFlushAsync(new ConnectPacket
            {
                ClientId      = ClientId,
                Username      = "******",
                Password      = "******",
                WillTopicName = "last/word",
                WillMessage   = Unpooled.WrappedBuffer(Encoding.UTF8.GetBytes("oops"))
            });

            var connAckPacket = Assert.IsType <ConnAckPacket>(await readListener.ReceiveAsync());

            Assert.Equal(ConnectReturnCode.Accepted, connAckPacket.ReturnCode);

            int subscribePacketId   = GetRandomPacketId();
            int unsubscribePacketId = GetRandomPacketId();
            await channel.WriteAndFlushManyAsync(
                new SubscribePacket(subscribePacketId,
                                    new SubscriptionRequest(SubscribeTopicFilter1, QualityOfService.ExactlyOnce),
                                    new SubscriptionRequest(SubscribeTopicFilter2, QualityOfService.AtLeastOnce),
                                    new SubscriptionRequest("for/unsubscribe", QualityOfService.AtMostOnce)),
                new UnsubscribePacket(unsubscribePacketId, "for/unsubscribe"));

            var subAckPacket = Assert.IsType <SubAckPacket>(await readListener.ReceiveAsync());

            Assert.Equal(subscribePacketId, subAckPacket.PacketId);
            Assert.Equal(3, subAckPacket.ReturnCodes.Count);
            Assert.Equal(QualityOfService.ExactlyOnce, subAckPacket.ReturnCodes[0]);
            Assert.Equal(QualityOfService.AtLeastOnce, subAckPacket.ReturnCodes[1]);
            Assert.Equal(QualityOfService.AtMostOnce, subAckPacket.ReturnCodes[2]);

            var unsubAckPacket = Assert.IsType <UnsubAckPacket>(await readListener.ReceiveAsync());

            Assert.Equal(unsubscribePacketId, unsubAckPacket.PacketId);

            int publishQoS1PacketId = GetRandomPacketId();
            await channel.WriteAndFlushManyAsync(
                new PublishPacket(QualityOfService.AtMostOnce, false, false)
            {
                TopicName = PublishC2STopic,
                Payload   = Unpooled.WrappedBuffer(Encoding.UTF8.GetBytes(PublishC2SQos0Payload))
            },
                new PublishPacket(QualityOfService.AtLeastOnce, false, false)
            {
                PacketId  = publishQoS1PacketId,
                TopicName = PublishC2SQos1Topic,
                Payload   = Unpooled.WrappedBuffer(Encoding.UTF8.GetBytes(PublishC2SQos1Payload))
            });

            //new PublishPacket(QualityOfService.AtLeastOnce, false, false) { TopicName = "feedback/qos/One", Payload = Unpooled.WrappedBuffer(Encoding.UTF8.GetBytes("QoS 1 test. Different data length.")) });

            var pubAckPacket = Assert.IsType <PubAckPacket>(await readListener.ReceiveAsync());

            Assert.Equal(publishQoS1PacketId, pubAckPacket.PacketId);

            var publishPacket = Assert.IsType <PublishPacket>(await readListener.ReceiveAsync());

            Assert.Equal(QualityOfService.AtLeastOnce, publishPacket.QualityOfService);
            Assert.Equal(PublishS2CQos1Topic, publishPacket.TopicName);
            Assert.Equal(PublishS2CQos1Payload, publishPacket.Payload.ToString(Encoding.UTF8));

            await channel.WriteAndFlushManyAsync(
                PubAckPacket.InResponseTo(publishPacket),
                DisconnectPacket.Instance);
        }
Esempio n. 4
0
 public async Task SendAsync(byte[] bytes)
 {
     await clientChannel?.WriteAndFlushAsync(Unpooled.WrappedBuffer(bytes));
 }
Esempio n. 5
0
        protected override void Decode(IChannelHandlerContext context, IByteBuffer input, List <object> output)
        {
            Debug.Assert(context != null);
            Debug.Assert(input != null);
            Debug.Assert(output != null);

            while (true)
            {
                input.MarkReaderIndex();
                var firstByteInPacketIndex = input.ReaderIndex;

                if (input.ReadableBytes < 2)
                {
                    break;
                }

                var payloadLengthIncludingOpcode = (int)input.ReadByte();
                var isTwoByteLen = false;
                if (payloadLengthIncludingOpcode >= 160)
                {
                    payloadLengthIncludingOpcode = (payloadLengthIncludingOpcode - 160) * 256 + input.ReadByte();
                    isTwoByteLen = true;
                }

                var inboundDataReadyForProcessing = input.ReadableBytes >= payloadLengthIncludingOpcode;
                if (!inboundDataReadyForProcessing)
                {
                    input.ResetReaderIndex();
                    break;
                }

                if (payloadLengthIncludingOpcode == 1)
                {
                    // Read a 1-byte slice, which is the opcode.
                    var opcode    = input.ReadByte();
                    var newPacket = Unpooled.Buffer(1);

                    newPacket.WriteByte(opcode);

                    // Update the reader index to 1, which means that there are zero
                    // readable bytes in the slice.
                    newPacket.SetReaderIndex(1);
                    newPacket.MarkReaderIndex();

                    Debug.Assert(newPacket.ReadableBytes == 0);

                    output.Add(newPacket);
                }
                else if (!isTwoByteLen)
                {
                    var remainingBytes = payloadLengthIncludingOpcode;

                    var lastPayloadByte = input.ReadByte();
                    var opcode          = input.ReadByte();
                    remainingBytes -= 2;

                    var payload = new byte[payloadLengthIncludingOpcode];
                    payload[0] = opcode;
                    input.ReadBytes(payload, 1, remainingBytes);
                    payload[payload.Length - 1] = lastPayloadByte;

                    var newPacket = Unpooled.WrappedBuffer(payload);
                    newPacket.SetReaderIndex(1);
                    newPacket.MarkReaderIndex();

                    output.Add(newPacket);
                }
                else
                {
                    var remainingBytes = payloadLengthIncludingOpcode;

                    var opcode = input.ReadByte();
                    remainingBytes--;

                    var payload = new byte[payloadLengthIncludingOpcode];
                    payload[0] = opcode;
                    input.ReadBytes(payload, 1, remainingBytes);

                    var newPacket = Unpooled.WrappedBuffer(payload);
                    newPacket.SetReaderIndex(1);
                    newPacket.MarkReaderIndex();

                    output.Add(newPacket);
                }
            }
        }
Esempio n. 6
0
 public static Func <ClientCommand, ITcpRequest> CmdSend(Func <ClientCommand, string> transform)
 =>
 command =>
 new ClientDataSend(
     command.Client.Id,
     Unpooled.WrappedBuffer(Encoding.UTF8.GetBytes(transform(command) + "\n")));
Esempio n. 7
0
 public override void ExceptionCaught(IChannelHandlerContext context, Exception exception)
 {
     WriteResponse(context, Unpooled.WrappedBuffer(JT809SuperiorWebAPIHandler.ErrorHttpResponse(exception).Data), TypeJson, JT809SuperiorWebAPIHandler.ErrorHttpResponse(exception).Data.Length);
     logger.LogError(exception, exception.Message);
     context.CloseAsync();
 }
 /**
  * The {@link OneByteToThreeStringsDecoder} decodes this {@code byte[]} into three messages.
  */
 static IByteBuffer NewOneMessage() => Unpooled.WrappedBuffer(new byte[] { 1 });
Esempio n. 9
0
        IEnumerable <TestScenarioStep> GetMqttClientScenario(Func <object> currentMessageFunc)
        {
            yield return(TestScenarioStep.Message(new ConnectPacket
            {
                ClientId = ClientId,
                Username = "******",
                Password = "******",
                WillTopicName = "last/word",
                WillMessage = Unpooled.WrappedBuffer(Encoding.UTF8.GetBytes("oops"))
            }));

            var connAckPacket = Assert.IsType <ConnAckPacket>(currentMessageFunc());

            Assert.Equal(ConnectReturnCode.Accepted, connAckPacket.ReturnCode);

            int subscribePacketId   = GetRandomPacketId();
            int unsubscribePacketId = GetRandomPacketId();

            yield return(TestScenarioStep.Messages(
                             new SubscribePacket(subscribePacketId,
                                                 new SubscriptionRequest(SubscribeTopicFilter1, QualityOfService.ExactlyOnce),
                                                 new SubscriptionRequest(SubscribeTopicFilter2, QualityOfService.AtLeastOnce),
                                                 new SubscriptionRequest("for/unsubscribe", QualityOfService.AtMostOnce)),
                             new UnsubscribePacket(unsubscribePacketId, "for/unsubscribe")));

            var subAckPacket = Assert.IsType <SubAckPacket>(currentMessageFunc());

            Assert.Equal(subscribePacketId, subAckPacket.PacketId);
            Assert.Equal(3, subAckPacket.ReturnCodes.Count);
            Assert.Equal(QualityOfService.ExactlyOnce, subAckPacket.ReturnCodes[0]);
            Assert.Equal(QualityOfService.AtLeastOnce, subAckPacket.ReturnCodes[1]);
            Assert.Equal(QualityOfService.AtMostOnce, subAckPacket.ReturnCodes[2]);

            yield return(TestScenarioStep.MoreFeedbackExpected());

            var unsubAckPacket = Assert.IsType <UnsubAckPacket>(currentMessageFunc());

            Assert.Equal(unsubscribePacketId, unsubAckPacket.PacketId);

            int publishQoS1PacketId = GetRandomPacketId();

            yield return(TestScenarioStep.Messages(
                             new PublishPacket(QualityOfService.AtMostOnce, false, false)
            {
                TopicName = PublishC2STopic,
                Payload = Unpooled.WrappedBuffer(Encoding.UTF8.GetBytes(PublishC2SQos0Payload))
            },
                             new PublishPacket(QualityOfService.AtLeastOnce, false, false)
            {
                PacketId = publishQoS1PacketId,
                TopicName = PublishC2SQos1Topic,
                Payload = Unpooled.WrappedBuffer(Encoding.UTF8.GetBytes(PublishC2SQos1Payload))
            }));

            //new PublishPacket(QualityOfService.AtLeastOnce, false, false) { TopicName = "feedback/qos/One", Payload = Unpooled.WrappedBuffer(Encoding.UTF8.GetBytes("QoS 1 test. Different data length.")) });

            var pubAckPacket = Assert.IsType <PubAckPacket>(currentMessageFunc());

            Assert.Equal(publishQoS1PacketId, pubAckPacket.PacketId);

            yield return(TestScenarioStep.MoreFeedbackExpected());

            var publishPacket = Assert.IsType <PublishPacket>(currentMessageFunc());

            Assert.Equal(QualityOfService.AtLeastOnce, publishPacket.QualityOfService);
            Assert.Equal(PublishS2CQos1Topic, publishPacket.TopicName);
            Assert.Equal(PublishS2CQos1Payload, publishPacket.Payload.ToString(Encoding.UTF8));

            yield return(TestScenarioStep.Messages(
                             PubAckPacket.InResponseTo(publishPacket),
                             DisconnectPacket.Instance));
        }
Esempio n. 10
0
        public void AlreadyCompressedFrame()
        {
            var encoderChannel = new EmbeddedChannel(new PerMessageDeflateEncoder(9, 15, false));

            // initialize
            var payload = new byte[300];

            _random.NextBytes(payload);

            var frame = new BinaryWebSocketFrame(true,
                                                 WebSocketRsv.Rsv3 | WebSocketRsv.Rsv1, Unpooled.WrappedBuffer(payload));

            // execute
            Assert.True(encoderChannel.WriteOutbound(frame));
            var newFrame = encoderChannel.ReadOutbound <BinaryWebSocketFrame>();

            // test
            Assert.NotNull(newFrame);
            Assert.NotNull(newFrame.Content);
            Assert.Equal(WebSocketRsv.Rsv3 | WebSocketRsv.Rsv1, newFrame.Rsv);
            Assert.Equal(300, newFrame.Content.ReadableBytes);

            var finalPayload = new byte[300];

            newFrame.Content.ReadBytes(finalPayload);
            Assert.Equal(payload, finalPayload);
            newFrame.Release();
        }
Esempio n. 11
0
        public void FragmentedFrame()
        {
            var encoderChannel = new EmbeddedChannel(new PerMessageDeflateEncoder(9, 15, false, NeverSkipWebSocketExtensionFilter.Instance));
            var decoderChannel = new EmbeddedChannel(
                ZlibCodecFactory.NewZlibDecoder(ZlibWrapper.None));

            // initialize
            var payload1 = new byte[100];

            _random.NextBytes(payload1);
            var payload2 = new byte[100];

            _random.NextBytes(payload2);
            var payload3 = new byte[100];

            _random.NextBytes(payload3);

            var frame1 = new BinaryWebSocketFrame(false,
                                                  WebSocketRsv.Rsv3, Unpooled.WrappedBuffer(payload1));
            var frame2 = new ContinuationWebSocketFrame(false,
                                                        WebSocketRsv.Rsv3, Unpooled.WrappedBuffer(payload2));
            var frame3 = new ContinuationWebSocketFrame(true,
                                                        WebSocketRsv.Rsv3, Unpooled.WrappedBuffer(payload3));

            // execute
            Assert.True(encoderChannel.WriteOutbound(frame1));
            Assert.True(encoderChannel.WriteOutbound(frame2));
            Assert.True(encoderChannel.WriteOutbound(frame3));
            var compressedFrame1 = encoderChannel.ReadOutbound <BinaryWebSocketFrame>();
            var compressedFrame2 = encoderChannel.ReadOutbound <ContinuationWebSocketFrame>();
            var compressedFrame3 = encoderChannel.ReadOutbound <ContinuationWebSocketFrame>();

            // test
            Assert.NotNull(compressedFrame1);
            Assert.NotNull(compressedFrame2);
            Assert.NotNull(compressedFrame3);
            Assert.Equal(WebSocketRsv.Rsv1 | WebSocketRsv.Rsv3, compressedFrame1.Rsv);
            Assert.Equal(WebSocketRsv.Rsv3, compressedFrame2.Rsv);
            Assert.Equal(WebSocketRsv.Rsv3, compressedFrame3.Rsv);
            Assert.False(compressedFrame1.IsFinalFragment);
            Assert.False(compressedFrame2.IsFinalFragment);
            Assert.True(compressedFrame3.IsFinalFragment);

            Assert.True(decoderChannel.WriteInbound(compressedFrame1.Content));
            var uncompressedPayload1 = decoderChannel.ReadInbound <IByteBuffer>();
            var finalPayload1        = new byte[100];

            uncompressedPayload1.ReadBytes(finalPayload1);
            Assert.Equal(payload1, finalPayload1);
            uncompressedPayload1.Release();

            Assert.True(decoderChannel.WriteInbound(compressedFrame2.Content));
            var uncompressedPayload2 = decoderChannel.ReadInbound <IByteBuffer>();
            var finalPayload2        = new byte[100];

            uncompressedPayload2.ReadBytes(finalPayload2);
            Assert.Equal(payload2, finalPayload2);
            uncompressedPayload2.Release();

            Assert.True(decoderChannel.WriteInbound(compressedFrame3.Content));
            Assert.True(decoderChannel.WriteInbound(DeflateDecoder.FrameTail.Duplicate()));
            var uncompressedPayload3 = decoderChannel.ReadInbound <IByteBuffer>();
            var finalPayload3        = new byte[100];

            uncompressedPayload3.ReadBytes(finalPayload3);
            Assert.Equal(payload3, finalPayload3);
            uncompressedPayload3.Release();
        }
Esempio n. 12
0
        public void IllegalStateWhenCompressionInProgress()
        {
            var             selectivityCompressionFilter = new SelectivityDecompressionFilter1();
            EmbeddedChannel encoderChannel = new EmbeddedChannel(
                new PerMessageDeflateEncoder(9, 15, false, selectivityCompressionFilter));

            byte[] firstPayload = new byte[200];
            _random.NextBytes(firstPayload);

            byte[] finalPayload = new byte[90];
            _random.NextBytes(finalPayload);

            BinaryWebSocketFrame       firstPart = new BinaryWebSocketFrame(false, 0, Unpooled.WrappedBuffer(firstPayload));
            ContinuationWebSocketFrame finalPart = new ContinuationWebSocketFrame(true, 0, Unpooled.WrappedBuffer(finalPayload));

            Assert.True(encoderChannel.WriteOutbound(firstPart));

            var outboundFirstPart = encoderChannel.ReadOutbound <BinaryWebSocketFrame>();

            //first part is compressed
            Assert.Equal(WebSocketRsv.Rsv1, outboundFirstPart.Rsv);
            Assert.NotEqual(firstPayload, ByteBufferUtil.GetBytes(outboundFirstPart.Content));
            Assert.True(outboundFirstPart.Release());

            //final part throwing exception
            try
            {
                encoderChannel.WriteOutbound(finalPart);
                Assert.False(true);
            }
            catch (Exception exc)
            {
                var ae = exc as AggregateException;
                Assert.NotNull(ae);
                Assert.IsType <EncoderException>(ae.InnerException);
            }
            finally
            {
                Assert.True(finalPart.Release());
                Assert.False(encoderChannel.FinishAndReleaseAll());
            }
        }
        public static IByteBuffer GetContent(string webSocketLocation) => Unpooled.WrappedBuffer(
            Encoding.ASCII.GetBytes(
                "<html><head><title>Web Socket Performance Test</title></head>" + Newline +
                "<body>" + Newline +
                "<h2>WebSocket Performance Test</h2>" + Newline +
                "<label>Connection Status:</label>" + Newline +
                "<label id=\"connectionLabel\"></label><br />" + Newline +

                "<form onsubmit=\"return false;\">" + Newline +
                "Message size:" +
                "<input type=\"text\" id=\"messageSize\" value=\"1024\"/><br>" + Newline +
                "Number of messages:" +
                "<input type=\"text\" id=\"nrMessages\" value=\"100000\"/><br>" + Newline +
                "Data Type:" +
                "<input type=\"radio\" name=\"type\" id=\"typeText\" value=\"text\" checked>text" +
                "<input type=\"radio\" name=\"type\" id=\"typeBinary\" value=\"binary\">binary<br>" + Newline +
                "Mode:<br>" + Newline +
                "<input type=\"radio\" name=\"mode\" id=\"modeSingle\" value=\"single\" checked>" +
                "Wait for response after each messages<br>" + Newline +
                "<input type=\"radio\" name=\"mode\" id=\"modeAll\" value=\"all\">" +
                "Send all messages and then wait for all responses<br>" + Newline +
                "<input type=\"checkbox\" id=\"verifiyResponses\">Verify responded messages<br>" + Newline +
                "<input type=\"button\" value=\"Start Benchmark\"" + Newline +
                "       onclick=\"startBenchmark()\" />" + Newline +
                "<h3>Output</h3>" + Newline +
                "<textarea id=\"output\" style=\"width:500px;height:300px;\"></textarea>" + Newline +
                "<br>" + Newline +
                "<input type=\"button\" value=\"Clear\" onclick=\"clearText()\">" + Newline +
                "</form>" + Newline +

                "<script type=\"text/javascript\">" + Newline +
                "var benchRunning = false;" + Newline +
                "var messageSize = 0;" + Newline +
                "var totalMessages = 0;" + Newline +
                "var rcvdMessages = 0;" + Newline +
                "var isBinary = true;" + Newline +
                "var isSingle = true;" + Newline +
                "var verifiyResponses = false;" + Newline +
                "var benchData = null;" + Newline +
                "var startTime;" + Newline +
                "var endTime;" + Newline +
                "var socket;" + Newline +
                "var output = document.getElementById('output');" + Newline +
                "var connectionLabel = document.getElementById('connectionLabel');" + Newline +
                "if (!window.WebSocket) {" + Newline +
                "  window.WebSocket = window.MozWebSocket;" + Newline +
                '}' + Newline +
                "if (window.WebSocket) {" + Newline +
                "  socket = new WebSocket(\"" + webSocketLocation + "\");" + Newline +
                "  socket.binaryType = 'arraybuffer';" + Newline +
                "  socket.onmessage = function(event) {" + Newline +
                "    if (verifiyResponses) {" + Newline +
                "        if (isBinary) {" + Newline +
                "            if (!(event.data instanceof ArrayBuffer) || " + Newline +
                "                  event.data.byteLength != benchData.byteLength) {" + Newline +
                "                onInvalidResponse(benchData, event.data);" + Newline +
                "                return;" + Newline +
                "            } else {" + Newline +
                "                var v = new Uint8Array(event.data);" + Newline +
                "                for (var j = 0; j < benchData.byteLength; j++) {" + Newline +
                "                    if (v[j] != benchData[j]) {" + Newline +
                "                        onInvalidResponse(benchData, event.data);" + Newline +
                "                        return;" + Newline +
                "                    }" + Newline +
                "                }" + Newline +
                "            }" + Newline +
                "        } else {" + Newline +
                "            if (event.data != benchData) {" + Newline +
                "                onInvalidResponse(benchData, event.data);" + Newline +
                "                return;" + Newline +
                "            }" + Newline +
                "        }" + Newline +
                "    }" + Newline +
                "    rcvdMessages++;" + Newline +
                "    if (rcvdMessages == totalMessages) {" + Newline +
                "        onFinished();" + Newline +
                "    } else if (isSingle) {" + Newline +
                "        socket.send(benchData);" + Newline +
                "    }" + Newline +
                "  };" + Newline +
                "  socket.onopen = function(event) {" + Newline +
                "    connectionLabel.innerHTML = \"Connected\";" + Newline +
                "  };" + Newline +
                "  socket.onclose = function(event) {" + Newline +
                "    benchRunning = false;" + Newline +
                "    connectionLabel.innerHTML = \"Disconnected\";" + Newline +
                "  };" + Newline +
                "} else {" + Newline +
                "  alert(\"Your browser does not support Web Socket.\");" + Newline +
                '}' + Newline +
                Newline +
                "function onInvalidResponse(sent,recvd) {" + Newline +
                "    socket.close();" + Newline +
                "    alert(\"Error: Sent data did not match the received data!\");" + Newline +
                "}" + Newline +
                Newline +
                "function clearText() {" + Newline +
                "    output.value=\"\";" + Newline +
                "}" + Newline +
                Newline +
                "function createBenchData() {" + Newline +
                "    if (isBinary) {" + Newline +
                "        benchData = new Uint8Array(messageSize);" + Newline +
                "        for (var i=0; i < messageSize; i++) {" + Newline +
                "            benchData[i] += Math.floor(Math.random() * 255);" + Newline +
                "        }" + Newline +
                "    } else { " + Newline +
                "        benchData = \"\";" + Newline +
                "        for (var i=0; i < messageSize; i++) {" + Newline +
                "            benchData += String.fromCharCode(Math.floor(Math.random() * (123 - 65) + 65));" + Newline +
                "        }" + Newline +
                "    }" + Newline +
                "}" + Newline +
                Newline +
                "function startBenchmark(message) {" + Newline +
                "  if (!window.WebSocket || benchRunning) { return; }" + Newline +
                "  if (socket.readyState == WebSocket.OPEN) {" + Newline +
                "    isBinary = document.getElementById('typeBinary').checked;" + Newline +
                "    isSingle = document.getElementById('modeSingle').checked;" + Newline +
                "    verifiyResponses = document.getElementById('verifiyResponses').checked;" + Newline +
                "    messageSize = parseInt(document.getElementById('messageSize').value);" + Newline +
                "    totalMessages = parseInt(document.getElementById('nrMessages').value);" + Newline +
                "    if (isNaN(messageSize) || isNaN(totalMessages)) return;" + Newline +
                "    createBenchData();" + Newline +
                "    output.value = output.value + '\\nStarting Benchmark';" + Newline +
                "    rcvdMessages = 0;" + Newline +
                "    benchRunning = true;" + Newline +
                "    startTime = new Date();" + Newline +
                "    if (isSingle) {" + Newline +
                "        socket.send(benchData);" + Newline +
                "    } else {" + Newline +
                "        for (var i = 0; i < totalMessages; i++) socket.send(benchData);" + Newline +
                "    }" + Newline +
                "  } else {" + Newline +
                "    alert(\"The socket is not open.\");" + Newline +
                "  }" + Newline +
                '}' + Newline +
                Newline +
                "function onFinished() {" + Newline +
                "    endTime = new Date();" + Newline +
                "    var duration = (endTime - startTime) / 1000.0;" + Newline +
                "    output.value = output.value + '\\nTest took: ' + duration + 's';" + Newline +
                "    var messagesPerS = totalMessages / duration;" + Newline +
                "    output.value = output.value + '\\nPerformance: ' + messagesPerS + ' Messages/s';" + Newline +
                "    output.value = output.value + ' in each direction';" + Newline +
                "    output.value = output.value + '\\nRound trip: ' + 1000.0/messagesPerS + 'ms';" + Newline +
                "    var throughput = messageSize * totalMessages / duration;" + Newline +
                "    var throughputText;" + Newline +
                "    if (isBinary) throughputText = throughput / (1024*1024) + ' MB/s';" + Newline +
                "    else throughputText = throughput / (1000*1000) + ' MChars/s';" + Newline +
                "    output.value = output.value + '\\nThroughput: ' + throughputText;" + Newline +
                "    output.value = output.value + ' in each direction';" + Newline +
                "    benchRunning = false;" + Newline +
                "}" + Newline +
                "</script>" + Newline +
                "</body>" + Newline +
                "</html>" + Newline));
Esempio n. 14
0
        private void ObserveOutputIdle(bool writer)
        {
            TimeSpan       writerIdleTime = zeroSecond;
            TimeSpan       allIdleTime    = zeroSecond;
            IdleStateEvent expected;

            if (writer)
            {
                writerIdleTime = TimeSpan.FromSeconds(5);
                expected       = IdleStateEvent.FirstWriterIdleStateEvent;
            }
            else
            {
                allIdleTime = TimeSpan.FromSeconds(5);
                expected    = IdleStateEvent.FirstAllIdleStateEvent;
            }

            TestableIdleStateHandler idleStateHandler = new TestableIdleStateHandler(
                true, zeroSecond, writerIdleTime, allIdleTime);

            var events  = new List <object>();
            var handler = new TestEventChannelInboundHandlerAdapter(events);

            ObservableChannel channel = new ObservableChannel(idleStateHandler, handler);

            try
            {
                // We're writing 3 messages that will be consumed at different rates!
                channel.WriteAndFlushAsync(Unpooled.WrappedBuffer(new byte[] { 1 }));
                channel.WriteAndFlushAsync(Unpooled.WrappedBuffer(new byte[] { 2 }));
                channel.WriteAndFlushAsync(Unpooled.WrappedBuffer(new byte[] { 3 }));

                // Establish a baseline. We're not consuming anything and let it idle once.
                idleStateHandler.TickRun();
                Assert.Equal(1, events.Count);
                Assert.Same(expected, events[0]);
                events.Clear();

                // Our ticker should be at second 5
                Assert.Equal(TimeSpan.FromSeconds(5), idleStateHandler.Tick);

                // Consume one message in 4 seconds, then be idle for 2 seconds,
                // then run the task and we shouldn't get an IdleStateEvent because
                // we haven't been idle for long enough!
                idleStateHandler.DoTick(TimeSpan.FromSeconds(4));
                AssertNotNullAndRelease(channel.Consume());

                idleStateHandler.TickRun(TimeSpan.FromSeconds(2));
                Assert.Equal(0, events.Count);
                Assert.Equal(TimeSpan.FromSeconds(11), idleStateHandler.Tick); // 5s + 4s + 2s

                // Consume one message in 3 seconds, then be idle for 4 seconds,
                // then run the task and we shouldn't get an IdleStateEvent because
                // we haven't been idle for long enough!
                idleStateHandler.DoTick(TimeSpan.FromSeconds(3));
                AssertNotNullAndRelease(channel.Consume());

                idleStateHandler.TickRun(TimeSpan.FromSeconds(4));
                Assert.Equal(0, events.Count);
                Assert.Equal(TimeSpan.FromSeconds(18), idleStateHandler.Tick); // 11s + 3s + 4s

                // Don't consume a message and be idle for 5 seconds.
                // We should get an IdleStateEvent!
                idleStateHandler.TickRun(TimeSpan.FromSeconds(5));
                Assert.Equal(1, events.Count);
                Assert.Equal(TimeSpan.FromSeconds(23), idleStateHandler.Tick); // 18s + 5s
                events.Clear();

                // Consume one message in 2 seconds, then be idle for 1 seconds,
                // then run the task and we shouldn't get an IdleStateEvent because
                // we haven't been idle for long enough!
                idleStateHandler.DoTick(TimeSpan.FromSeconds(2));
                AssertNotNullAndRelease(channel.Consume());

                idleStateHandler.TickRun(TimeSpan.FromSeconds(1));
                Assert.Equal(0, events.Count);
                Assert.Equal(TimeSpan.FromSeconds(26), idleStateHandler.Tick); // 23s + 2s + 1s

                // There are no messages left! Advance the ticker by 3 seconds,
                // attempt a consume() but it will be null, then advance the
                // ticker by an another 2 seconds and we should get an IdleStateEvent
                // because we've been idle for 5 seconds.
                idleStateHandler.DoTick(TimeSpan.FromSeconds(3));
                Assert.Null(channel.Consume());

                idleStateHandler.TickRun(TimeSpan.FromSeconds(2));
                Assert.Equal(1, events.Count);
                Assert.Equal(TimeSpan.FromSeconds(31), idleStateHandler.Tick); // 26s + 3s + 2s

                // q.e.d.
            }
            finally
            {
                channel.FinishAndReleaseAll();
            }
        }
Esempio n. 15
0
        static async Task Main(string[] args)
        {
            var builder = new UriBuilder
            {
                Scheme = ClientSettings.IsSsl ? "wss" : "ws",
                Host   = ClientSettings.Host.ToString(),
                Port   = ClientSettings.Port,
            };

            string path = ExampleHelper.Configuration["path"];

            builder.Path = !string.IsNullOrEmpty(path) ? path : WEBSOCKET_PATH;

            Uri uri = builder.Uri;

            ExampleHelper.SetConsoleLogger();

            bool useLibuv = ClientSettings.UseLibuv;

            Console.WriteLine("Transport type : " + (useLibuv ? "Libuv" : "Socket"));

            IEventLoopGroup group;

            if (useLibuv)
            {
                group = new EventLoopGroup();
            }
            else
            {
                group = new MultithreadEventLoopGroup();
            }

            X509Certificate2 cert       = null;
            string           targetHost = null;

            if (ClientSettings.IsSsl)
            {
                cert       = new X509Certificate2(Path.Combine(ExampleHelper.ProcessDirectory, "dotnetty.com.pfx"), "password");
                targetHost = cert.GetNameInfo(X509NameType.DnsName, false);
            }
            try
            {
                var bootstrap = new Bootstrap();
                bootstrap
                .Group(group)
                .Option(ChannelOption.TcpNodelay, true);
                if (useLibuv)
                {
                    bootstrap.Channel <TcpChannel>();
                }
                else
                {
                    bootstrap.Channel <TcpSocketChannel>();
                }

                // Connect with V13 (RFC 6455 aka HyBi-17). You can change it to V08 or V00.
                // If you change it to V00, ping is not supported and remember to change
                // HttpResponseDecoder to WebSocketHttpResponseDecoder in the pipeline.
                WebSocketClientHandler handler =
                    new WebSocketClientHandler(
                        WebSocketClientHandshakerFactory.NewHandshaker(
                            uri, WebSocketVersion.V13, null, true, new DefaultHttpHeaders()));

                bootstrap.Handler(new ActionChannelInitializer <IChannel>(channel =>
                {
                    IChannelPipeline pipeline = channel.Pipeline;
                    if (cert != null)
                    {
                        pipeline.AddLast("tls", new TlsHandler(new ClientTlsSettings(targetHost).AllowAnyServerCertificate()));
                    }

                    pipeline.AddLast("idleStateHandler", new IdleStateHandler(0, 0, 60));

                    pipeline.AddLast(new LoggingHandler("CONN"));
                    pipeline.AddLast(
                        new HttpClientCodec(),
                        new HttpObjectAggregator(8192),
                        WebSocketClientCompressionHandler.Instance,
                        //new WebSocketClientProtocolHandler(
                        //    webSocketUrl: uri,
                        //    version: WebSocketVersion.V13,
                        //    subprotocol: null,
                        //    allowExtensions: true,
                        //    customHeaders: new DefaultHttpHeaders(),
                        //    maxFramePayloadLength: 65536,
                        //    handleCloseFrames: true,
                        //    performMasking: false,
                        //    allowMaskMismatch: true,
                        //    enableUtf8Validator: false),
                        new WebSocketFrameAggregator(65536),
                        handler);
                }));

                try
                {
                    IChannel ch = await bootstrap.ConnectAsync(new IPEndPoint(ClientSettings.Host, ClientSettings.Port));

                    await handler.HandshakeCompletion;

                    Console.WriteLine("WebSocket handshake completed.\n");
                    Console.WriteLine("\t[bye]:Quit \n\t [ping]:Send ping frame\n\t Enter any text and Enter: Send text frame");
                    while (true)
                    {
                        string msg = Console.ReadLine();
                        if (msg == null)
                        {
                            break;
                        }
                        msg = msg.ToLowerInvariant();

                        switch (msg)
                        {
                        case "bye":
                            await ch.WriteAndFlushAsync(new CloseWebSocketFrame());

                            goto CloseLable;

                        case "ping":
                            var ping = new PingWebSocketFrame(Unpooled.WrappedBuffer(new byte[] { 8, 1, 8, 1 }));
                            await ch.WriteAndFlushAsync(ping);

                            break;

                        case "this is a test":
                            await ch.WriteAndFlushManyAsync(
                                new TextWebSocketFrame(false, "this "),
                                new ContinuationWebSocketFrame(false, "is "),
                                new ContinuationWebSocketFrame(false, "a "),
                                new ContinuationWebSocketFrame(true, "test")
                                );

                            break;

                        case "this is a error":
                            await ch.WriteAndFlushAsync(new TextWebSocketFrame(false, "this "));

                            await ch.WriteAndFlushAsync(new ContinuationWebSocketFrame(false, "is "));

                            await ch.WriteAndFlushAsync(new ContinuationWebSocketFrame(false, "a "));

                            await ch.WriteAndFlushAsync(new TextWebSocketFrame(true, "error"));

                            break;

                        default:
                            await ch.WriteAndFlushAsync(new TextWebSocketFrame(msg));

                            break;
                        }
                    }
CloseLable:
                    await ch.CloseAsync();
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.ToString());
                    Console.WriteLine("按任意键退出");
                    Console.ReadKey();
                }
            }
            finally
            {
                await group.ShutdownGracefullyAsync(TimeSpan.FromMilliseconds(100), TimeSpan.FromSeconds(1));
            }
        }
Esempio n. 16
0
 private static IByteBuffer Buf(byte[] bytes)
 {
     return(Unpooled.WrappedBuffer(bytes));
 }
Esempio n. 17
0
 public void RmiMessage(IChannelHandlerContext context, RmiMessage message, RecvContext recvContext)
 {
     recvContext.Message = Unpooled.WrappedBuffer(message.Data);
     context.FireChannelRead(recvContext);
 }
Esempio n. 18
0
 public Task WriteToChannelAsync(EmbeddedChannel channel, ArraySegment <byte> input)
 {
     channel.WriteInbound(Unpooled.WrappedBuffer(input.Array, input.Offset, input.Count));
     return(TaskUtil.Completed);
 }
        public void FragmentedFrameWithLeftOverInLastFragment()
        {
            string hexDump = "677170647a777a737574656b707a787a6f6a7561756578756f6b7868616371716c657a6d64697479766d726f6" +
                             "269746c6376777464776f6f72767a726f64667278676764687775786f6762766d776d706b76697773777a7072" +
                             "6a6a737279707a7078697a6c69616d7461656d646278626d786f66666e686e776a7a7461746d7a776668776b6" +
                             "f6f736e73746575637a6d727a7175707a6e74627578687871767771697a71766c64626d78726d6d7675756877" +
                             "62667963626b687a726d676e646263776e67797264706d6c6863626577616967706a78636a72697464756e627" +
                             "977616f79736475676f76736f7178746a7a7479626c64636b6b6778637768746c62";
            EmbeddedChannel encoderChannel = new EmbeddedChannel(
                ZlibCodecFactory.NewZlibEncoder(ZlibWrapper.None, 9, 15, 8));
            EmbeddedChannel decoderChannel = new EmbeddedChannel(new PerMessageDeflateDecoder(false));

            IByteBuffer originPayload = Unpooled.WrappedBuffer(StringUtil.DecodeHexDump(hexDump));

            Assert.True(encoderChannel.WriteOutbound(originPayload.Duplicate().Retain()));

            var compressedPayload = encoderChannel.ReadOutbound <IByteBuffer>();

            compressedPayload = compressedPayload.Slice(0, compressedPayload.ReadableBytes - 4);

            int oneThird = compressedPayload.ReadableBytes / 3;

            TextWebSocketFrame compressedFrame1 = new TextWebSocketFrame(
                false, WebSocketRsv.Rsv1, compressedPayload.Slice(0, oneThird));
            ContinuationWebSocketFrame compressedFrame2 = new ContinuationWebSocketFrame(
                false, WebSocketRsv.Rsv3, compressedPayload.Slice(oneThird, oneThird));
            ContinuationWebSocketFrame compressedFrame3 = new ContinuationWebSocketFrame(
                false, WebSocketRsv.Rsv3, compressedPayload.Slice(oneThird * 2, oneThird));
            int offset = oneThird * 3;
            ContinuationWebSocketFrame compressedFrameWithExtraData = new ContinuationWebSocketFrame(
                true, WebSocketRsv.Rsv3, compressedPayload.Slice(offset,
                                                                 compressedPayload.ReadableBytes - offset));

            // check that last fragment contains only one extra byte
            Assert.Equal(1, compressedFrameWithExtraData.Content.ReadableBytes);
            Assert.Equal(1, compressedFrameWithExtraData.Content.GetByte(0));

            // write compressed frames
            Assert.True(decoderChannel.WriteInbound(compressedFrame1.Retain()));
            Assert.True(decoderChannel.WriteInbound(compressedFrame2.Retain()));
            Assert.True(decoderChannel.WriteInbound(compressedFrame3.Retain()));
            Assert.True(decoderChannel.WriteInbound(compressedFrameWithExtraData));

            // read uncompressed frames
            TextWebSocketFrame         uncompressedFrame1    = decoderChannel.ReadInbound <TextWebSocketFrame>();
            ContinuationWebSocketFrame uncompressedFrame2    = decoderChannel.ReadInbound <ContinuationWebSocketFrame>();
            ContinuationWebSocketFrame uncompressedFrame3    = decoderChannel.ReadInbound <ContinuationWebSocketFrame>();
            ContinuationWebSocketFrame uncompressedExtraData = decoderChannel.ReadInbound <ContinuationWebSocketFrame>();

            Assert.False(uncompressedExtraData.Content.IsReadable());

            var uncompressedPayload = Unpooled.WrappedBuffer(uncompressedFrame1.Content, uncompressedFrame2.Content,
                                                             uncompressedFrame3.Content, uncompressedExtraData.Content);

            Assert.Equal(originPayload, uncompressedPayload);

            Assert.True(originPayload.Release());
            Assert.True(uncompressedPayload.Release());

            Assert.True(encoderChannel.FinishAndReleaseAll());
            Assert.False(decoderChannel.Finish());
        }
Esempio n. 20
0
        static async Task RunClientAsync()
        {
            var builder = new UriBuilder
            {
                Scheme = ClientSettings.IsSsl ? "wss" : "ws",
                Host   = ClientSettings.Host.ToString(),
                Port   = ClientSettings.Port
            };

            string path = ExampleHelper.Configuration["path"];

            if (!string.IsNullOrEmpty(path))
            {
                builder.Path = path;
            }

            Uri uri = builder.Uri;

            ExampleHelper.SetConsoleLogger();

            bool useLibuv = ClientSettings.UseLibuv;

            Console.WriteLine("Transport type : " + (useLibuv ? "Libuv" : "Socket"));

            IEventLoopGroup group;

            if (useLibuv)
            {
                group = new EventLoopGroup();
            }
            else
            {
                group = new MultithreadEventLoopGroup();
            }

            X509Certificate2 cert       = null;
            string           targetHost = null;

            if (ClientSettings.IsSsl)
            {
                cert       = new X509Certificate2(Path.Combine(ExampleHelper.ProcessDirectory, "dotnetty.com.pfx"), "password");
                targetHost = cert.GetNameInfo(X509NameType.DnsName, false);
            }
            try
            {
                var bootstrap = new Bootstrap();
                bootstrap
                .Group(group)
                .Option(ChannelOption.TcpNodelay, true);
                if (useLibuv)
                {
                    bootstrap.Channel <TcpChannel>();
                }
                else
                {
                    bootstrap.Channel <TcpSocketChannel>();
                }

                // Connect with V13 (RFC 6455 aka HyBi-17). You can change it to V08 or V00.
                // If you change it to V00, ping is not supported and remember to change
                // HttpResponseDecoder to WebSocketHttpResponseDecoder in the pipeline.
                var handler = new WebSocketClientHandler(
                    WebSocketClientHandshakerFactory.NewHandshaker(
                        uri, WebSocketVersion.V13, null, true, new DefaultHttpHeaders()));

                bootstrap.Handler(new ActionChannelInitializer <IChannel>(channel =>
                {
                    IChannelPipeline pipeline = channel.Pipeline;
                    if (cert != null)
                    {
                        pipeline.AddLast("tls", new TlsHandler(stream => new SslStream(stream, true, (sender, certificate, chain, errors) => true), new ClientTlsSettings(targetHost)));
                    }

                    pipeline.AddLast(
                        new HttpClientCodec(),
                        new HttpObjectAggregator(8192),
                        WebSocketClientCompressionHandler.Instance,
                        handler);
                }));

                IChannel ch = await bootstrap.ConnectAsync(new IPEndPoint(ClientSettings.Host, ClientSettings.Port));

                await handler.HandshakeCompletion;

                Console.WriteLine("WebSocket handshake completed.\n");
                Console.WriteLine("\t[bye]:Quit \n\t [ping]:Send ping frame\n\t Enter any text and Enter: Send text frame");
                while (true)
                {
                    string msg = Console.ReadLine();
                    if (msg == null)
                    {
                        break;
                    }
                    else if ("bye".Equals(msg.ToLower()))
                    {
                        await ch.WriteAndFlushAsync(new CloseWebSocketFrame());

                        break;
                    }
                    else if ("ping".Equals(msg.ToLower()))
                    {
                        var frame = new PingWebSocketFrame(Unpooled.WrappedBuffer(new byte[] { 8, 1, 8, 1 }));
                        await ch.WriteAndFlushAsync(frame);
                    }
                    else
                    {
                        WebSocketFrame frame = new TextWebSocketFrame(msg);
                        await ch.WriteAndFlushAsync(frame);
                    }
                }

                await ch.CloseAsync();
            }
            finally
            {
                await group.ShutdownGracefullyAsync(TimeSpan.FromMilliseconds(100), TimeSpan.FromSeconds(1));
            }
        }
 public DatagramPacket Create(byte[] message, EndPoint recipient)
 {
     return(new DatagramPacket(Unpooled.WrappedBuffer(message), recipient));
 }
            async Task GetPart1SpecificSteps(IChannel channel, ReadListeningHandler readHandler)
            {
                int publishQoS1PacketId = GetRandomPacketId();
                await channel.WriteAndFlushManyAsync(
                    new PublishPacket(QualityOfService.AtMostOnce, false, false)
                {
                    //TopicName = string.Format("devices/{0}/messages/log/verbose/", clientId),
                    TopicName = $"devices/{this.clientId}/messages/events",
                    Payload   = Unpooled.WrappedBuffer(Encoding.UTF8.GetBytes("{\"test\": \"telemetry-QoS0\"}"))
                },
                    new PublishPacket(QualityOfService.AtLeastOnce, false, false)
                {
                    PacketId  = publishQoS1PacketId,
                    TopicName = $"devices/{this.clientId}/messages/events",
                    Payload   = Unpooled.WrappedBuffer(Encoding.UTF8.GetBytes("{\"test\": \"telemetry\"}"))
                });

                Packet[] packets = (await Task.WhenAll(Enumerable.Repeat(0, 5).Select(_ => readHandler.ReceiveAsync())))
                                   .Select(Assert.IsAssignableFrom <Packet>)
                                   .ToArray();

                PubAckPacket pubAckPacket = Assert.Single(packets.OfType <PubAckPacket>());

                Assert.Equal(publishQoS1PacketId, pubAckPacket.PacketId);

                PublishPacket publishQoS0Packet = Assert.Single(packets.OfType <PublishPacket>().Where(x => x.QualityOfService == QualityOfService.AtMostOnce));

                this.AssertPacketCoreValue(publishQoS0Packet, NotificationQoS0Content);

                PublishPacket publishQoS1Packet = Assert.Single(packets.OfType <PublishPacket>().Where(x => x.QualityOfService == QualityOfService.AtLeastOnce));

                this.AssertPacketCoreValue(publishQoS1Packet, NotificationQoS1Content);

                PublishPacket[] publishQoS2Packets = packets.OfType <PublishPacket>().Where(x => x.QualityOfService == QualityOfService.ExactlyOnce).ToArray();
                Assert.Equal(2, publishQoS2Packets.Length);
                PublishPacket publishQoS2Packet1 = publishQoS2Packets[0];

                this.AssertPacketCoreValue(publishQoS2Packet1, NotificationQoS2Content);
                PublishPacket publishQoS2Packet2 = publishQoS2Packets[1];

                this.AssertPacketCoreValue(publishQoS2Packet2, NotificationQoS2Content2);

                await channel.WriteAndFlushManyAsync(
                    PubAckPacket.InResponseTo(publishQoS1Packet),
                    PubRecPacket.InResponseTo(publishQoS2Packet1),
                    PubRecPacket.InResponseTo(publishQoS2Packet2));

                var pubRelQoS2Packet1 = Assert.IsAssignableFrom <PubRelPacket>(await readHandler.ReceiveAsync());

                Assert.Equal(publishQoS2Packet1.PacketId, pubRelQoS2Packet1.PacketId);

                var pubRelQoS2Packet2 = Assert.IsAssignableFrom <PubRelPacket>(await readHandler.ReceiveAsync());

                Assert.Equal(publishQoS2Packet2.PacketId, pubRelQoS2Packet2.PacketId);

                await channel.WriteAndFlushManyAsync(
                    PubCompPacket.InResponseTo(pubRelQoS2Packet1),
                    DisconnectPacket.Instance);

                // device queue still contains QoS 2 packet 2 which was PUBRECed but not PUBCOMPed.
            }
Esempio n. 23
0
 public async Task SendAsync(EndPoint endPoint, byte[] bytes)
 {
     var buffer = Unpooled.WrappedBuffer(bytes);
     var dp     = new DatagramPacket(buffer, endPoint);
     await channel.WriteAndFlushAsync(dp);
 }
Esempio n. 24
0
 public TarsInputStream(byte[] bs, int pos)
 {
     buffer = Unpooled.WrappedBuffer(bs);
     buffer.SkipBytes(pos);
 }
Esempio n. 25
0
        public override bool TryInvokeMember(InvokeMemberBinder binder, object[] args, out object result)
        {
            try
            {
                ResponseModel response = null;
                IChannel      client   = null;
                try
                {
                    client = AsyncHelpers.RunSync(() => _bootstrap.ConnectAsync($"{ServerIp}:{ServerPort}".ToIPEndPoint()));
                }
                catch
                {
                    throw new Exception("连接到服务端失败!");
                }
                if (client != null)
                {
                    _clientWait.Start(client.Id.AsShortText());
                    RequestModel requestModel = new RequestModel
                    {
                        ServiceName = ServiceName,
                        MethodName  = binder.Name,
                        Paramters   = args.ToList()
                    };
                    var sendBuffer = Unpooled.WrappedBuffer(requestModel.ToJson().ToBytes(Encoding.UTF8));

                    client.WriteAndFlushAsync(sendBuffer);
                    var responseStr = _clientWait.Wait(client.Id.AsShortText()).ResponseString;
                    response = responseStr.ToObject <ResponseModel>();
                }
                else
                {
                    throw new Exception("连接到服务端失败!");
                }

                if (response == null)
                {
                    throw new Exception("服务器超时未响应");
                }
                else if (response.Success)
                {
                    Type returnType = ServiceType.GetMethod(binder.Name).ReturnType;
                    if (returnType == typeof(void))
                    {
                        result = null;
                    }
                    else
                    {
                        result = response.Data.ToObject(returnType);
                    }

                    return(true);
                }
                else
                {
                    throw new Exception($"服务器异常,错误消息:{response.Msg}");
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
Esempio n. 26
0
 public void Wrap(byte[] bs) =>
 buffer = Unpooled.WrappedBuffer(bs);
Esempio n. 27
0
        public void NotEqualsBufferUnderflow()
        {
            var b1   = new byte[8];
            var b2   = new byte[16];
            var rand = new Random();

            rand.NextBytes(b1);
            rand.NextBytes(b2);
            int iB1    = b1.Length / 2;
            int iB2    = iB1 + b1.Length;
            int length = b1.Length - iB1;

            Array.Copy(b1, iB1, b2, iB2, length - 1);
            Assert.Throws <ArgumentException>(() => ByteBufferUtil.Equals(Unpooled.WrappedBuffer(b1), iB1, Unpooled.WrappedBuffer(b2), iB2, -1));
        }
Esempio n. 28
0
        /// <summary>
        /// Gets the byte buffer.
        /// </summary>
        /// <param name="message">The message.</param>
        /// <returns>IByteBuffer.</returns>
        protected IByteBuffer GetByteBuffer(TransportMessage message)
        {
            var data = message.GetContent <byte[]>();

            return(Unpooled.WrappedBuffer(data));
        }
        public async Task EchoServerAndClient()
        {
            var         testPromise     = new TaskCompletionSource();
            var         tlsCertificate  = TestResourceHelper.GetTestCertificate();
            Func <Task> closeServerFunc = await this.StartServerAsync(true, ch =>
            {
                ch.Pipeline.AddLast("server logger", new LoggingHandler("SERVER"));
                ch.Pipeline.AddLast("server tls", TlsHandler.Server(tlsCertificate));
                ch.Pipeline.AddLast("server logger2", new LoggingHandler("SER***"));
                ch.Pipeline.AddLast("server prepender", new LengthFieldPrepender(2));
                ch.Pipeline.AddLast("server decoder", new LengthFieldBasedFrameDecoder(ushort.MaxValue, 0, 2, 0, 2));
                ch.Pipeline.AddLast(new EchoChannelHandler());
            }, testPromise);

            var       group        = new MultithreadEventLoopGroup();
            var       readListener = new ReadListeningHandler(DefaultTimeout);
            Bootstrap b            = new Bootstrap()
                                     .Group(group)
                                     .Channel <TcpSocketChannel>()
                                     .Option(ChannelOption.TcpNodelay, true)
                                     .Handler(new ActionChannelInitializer <ISocketChannel>(ch =>
            {
                string targetHost     = tlsCertificate.GetNameInfo(X509NameType.DnsName, false);
                var clientTlsSettings = new ClientTlsSettings(targetHost);
                ch.Pipeline.AddLast("client logger", new LoggingHandler("CLIENT"));
                ch.Pipeline.AddLast("client tls", new TlsHandler(stream => new SslStream(stream, true, (sender, certificate, chain, errors) => true), clientTlsSettings));
                ch.Pipeline.AddLast("client logger2", new LoggingHandler("CLI***"));
                ch.Pipeline.AddLast("client prepender", new LengthFieldPrepender(2));
                ch.Pipeline.AddLast("client decoder", new LengthFieldBasedFrameDecoder(ushort.MaxValue, 0, 2, 0, 2));
                ch.Pipeline.AddLast(readListener);
            }));

            this.Output.WriteLine("Configured Bootstrap: {0}", b);

            IChannel clientChannel = null;

            try
            {
                clientChannel = await b.ConnectAsync(IPAddress.Loopback, Port);

                this.Output.WriteLine("Connected channel: {0}", clientChannel);

                string[] messages = { "message 1", string.Join(",", Enumerable.Range(1, 300)) };
                foreach (string message in messages)
                {
                    await clientChannel.WriteAndFlushAsync(Unpooled.WrappedBuffer(Encoding.UTF8.GetBytes(message))).WithTimeout(DefaultTimeout);

                    var responseMessage = Assert.IsAssignableFrom <IByteBuffer>(await readListener.ReceiveAsync());
                    Assert.Equal(message, responseMessage.ToString(Encoding.UTF8));
                }

                testPromise.TryComplete();
                await testPromise.Task.WithTimeout(TimeSpan.FromSeconds(30));
            }
            finally
            {
                Task serverCloseTask = closeServerFunc();
                clientChannel?.CloseAsync().Wait(TimeSpan.FromSeconds(5));
                group.ShutdownGracefullyAsync().Wait(TimeSpan.FromSeconds(5));
                if (!serverCloseTask.Wait(ShutdownTimeout))
                {
                    this.Output.WriteLine("Didn't stop in time.");
                }
            }
        }
        public void WrappedBuffer()
        {
            var         bytes = new byte[16];
            IByteBuffer a     = Unpooled.WrappedBuffer(Unpooled.WrappedBuffer(bytes));

            Assert.Equal(16, a.Capacity);
            a.Release();

            a = Unpooled.WrappedBuffer(Unpooled.WrappedBuffer(new byte[] { 1, 2, 3 }));
            IByteBuffer b = Unpooled.WrappedBuffer(Unpooled.WrappedBuffer(new byte[][] { new byte[] { 1, 2, 3 } }));

            Assert.Equal(a, b);

            a.Release();
            b.Release();

            a = Unpooled.WrappedBuffer(Unpooled.WrappedBuffer(new byte[] { 1, 2, 3 }));
            b = Unpooled.WrappedBuffer(Unpooled.WrappedBuffer(
                                           new byte[] { 1 },
                                           new byte[] { 2 },
                                           new byte[] { 3 }));
            Assert.Equal(a, b);

            a.Release();
            b.Release();

            a = Unpooled.WrappedBuffer(Unpooled.WrappedBuffer(new byte[] { 1, 2, 3 }));
            b = Unpooled.WrappedBuffer(new[] {
                Unpooled.WrappedBuffer(new byte[] { 1, 2, 3 })
            });
            Assert.Equal(a, b);

            a.Release();
            b.Release();

            a = Unpooled.WrappedBuffer(Unpooled.WrappedBuffer(new byte[] { 1, 2, 3 }));
            b = Unpooled.WrappedBuffer(
                Unpooled.WrappedBuffer(new byte[] { 1 }),
                Unpooled.WrappedBuffer(new byte[] { 2 }),
                Unpooled.WrappedBuffer(new byte[] { 3 }));
            Assert.Equal(a, b);

            a.Release();
            b.Release();

            a = Unpooled.WrappedBuffer(Unpooled.WrappedBuffer(new byte[] { 1, 2, 3 }));
            b = Unpooled.WrappedBuffer(Unpooled.WrappedBuffer(new[] {
                Unpooled.WrappedBuffer(new byte[] { 1, 2, 3 })
            }));
            Assert.Equal(a, b);

            a.Release();
            b.Release();

            a = Unpooled.WrappedBuffer(Unpooled.WrappedBuffer(new byte[] { 1, 2, 3 }));
            b = Unpooled.WrappedBuffer(Unpooled.WrappedBuffer(
                                           Unpooled.WrappedBuffer(new byte[] { 1 }),
                                           Unpooled.WrappedBuffer(new byte[] { 2 }),
                                           Unpooled.WrappedBuffer(new byte[] { 3 })));
            Assert.Equal(a, b);

            a.Release();
            b.Release();
        }