public bool TryParseMessage(out RdapMessage message)
        {
            message = null;

            if (messageReader.BaseStream.Length <= 0)
                return false;

            for (var i = startCommandIndex; i < commands.Count; i++)
            {
                try
                {
                    commands[i]();
                }
                catch (InsufficientRdapMessageException)
                {
                    startCommandIndex = i;
                    return false;
                }
            }

            message = currentRdapMessage;
            IntialiseStateObjects();

            return true;
        }
        public void RDAMessageParserShouldReturnFalseIfNoMessageToBuild()
        {
            var fifoStream = new FifoStream();

            var desktopMessage = new RdapMessage(
                RdapMessageType.DesktopWindowImageFrameMessage,
                new byte[]
                    {
                        1, 4, 0, 0, 0, 4, 0, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0,
                        0, 0, 0,
                        0, 0, 0, 0, 0
                        , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                        0, 0, 0,
                        0, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 10, 0, 0, 0,
                        10, 0, 0,
                        0, 40, 0, 0,
                        0, 50, 0, 0, 0, 10, 0, 0, 0, 10, 0, 0, 0, 40, 0, 0, 0,
                        50, 0, 0,
                        0
                    }
                );

            var mouseClickEventMessage = new RdapMessage(
                RdapMessageType.MouseClickEventMessage,
                new byte[] { 2, 56, 0, 0, 0, 67, 0, 0, 0 }
                );

            var bytesToWrite1 = desktopMessage.ToBytes();
            var bytesToWrite2 = mouseClickEventMessage.ToBytes();

            var parser = new RdapMessageParser(fifoStream);

            fifoStream.Write(bytesToWrite1, 0, bytesToWrite1.Length - 10);

            RdapMessage desktopMessageOutput;
            var retVal = parser.TryParseMessage(out desktopMessageOutput);
            Assert.AreEqual(false, retVal);
            Assert.AreEqual(null, desktopMessageOutput);

            fifoStream.Write(bytesToWrite1, bytesToWrite1.Length - 10, 10);
            fifoStream.Write(bytesToWrite2, 0, bytesToWrite2.Length);

            parser.TryParseMessage(out desktopMessageOutput);
            Assert.AreEqual(RdapMessageType.DesktopWindowImageFrameMessage, desktopMessageOutput.MessageType);
            Assert.AreEqual(97, desktopMessageOutput.Data.Length);

            RdapMessage mouseClickEventMessageOutput;
            parser.TryParseMessage(out mouseClickEventMessageOutput);
            Assert.AreEqual(RdapMessageType.MouseClickEventMessage, mouseClickEventMessageOutput.MessageType);
            Assert.AreEqual(9, mouseClickEventMessageOutput.Data.Length);
        }
        public void ShouldAbleToRetriveVariables()
        {
            var messageBuffer = new byte[]
                                    {
                                        1, 4, 0, 0, 0, 4, 0, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
                                        , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                                        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 10, 0, 0, 0, 10, 0, 0, 0, 40, 0, 0,
                                        0, 50, 0, 0, 0, 10, 0, 0, 0, 10, 0, 0, 0, 40, 0, 0, 0, 50, 0, 0, 0
                                    };

            var message = new RdapMessage(RdapMessageType.DesktopWindowImageFrameMessage, messageBuffer);

            Assert.AreEqual(RdapMessageType.DesktopWindowImageFrameMessage, message.MessageType);
            Assert.AreEqual(messageBuffer.Length, message.Data.Length);

            for (var i = 0; i < messageBuffer.Length; i++)
            {
                if (messageBuffer[i] != message.Data[i])
                    Assert.Fail("Message contents is not same");
            }
        }
 private void IntialiseStateObjects()
 {
     startCommandIndex = 0;
     currentRdapMessage = new RdapMessage();
     currentRdapMessageDataLength = 0;
 }
        public void ShouldAbleToReadRDAMessageFromStream()
        {
            var fifoStream = new FifoStream();

            var desktopMessage = new RdapMessage(
                RdapMessageType.DesktopWindowImageFrameMessage,
                new byte[]
                    {
                        1, 4, 0, 0, 0, 4, 0, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0,
                        0, 0, 0,
                        0, 0, 0, 0, 0
                        , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                        0, 0, 0,
                        0, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 10, 0, 0, 0,
                        10, 0, 0,
                        0, 40, 0, 0,
                        0, 50, 0, 0, 0, 10, 0, 0, 0, 10, 0, 0, 0, 40, 0, 0, 0,
                        50, 0, 0,
                        0
                    }
                );

            var mouseClickEventMessage = new RdapMessage(
                RdapMessageType.MouseClickEventMessage,
                new byte[] { 2, 56, 0, 0, 0, 67, 0, 0, 0 }
                );

            var bytesToWrite1 = desktopMessage.ToBytes();
            var bytesToWrite2 = mouseClickEventMessage.ToBytes();

            fifoStream.Write(bytesToWrite1, 0, bytesToWrite1.Length);
            fifoStream.Write(bytesToWrite2, 0, bytesToWrite2.Length);

            var parser = new RdapMessageParser(fifoStream);

            RdapMessage desktopMessageOutput;
            parser.TryParseMessage(out desktopMessageOutput);
            Assert.AreEqual(RdapMessageType.DesktopWindowImageFrameMessage, desktopMessageOutput.MessageType);
            Assert.AreEqual(97, desktopMessageOutput.Data.Length);

            RdapMessage mouseClickEventMessageOutput;
            parser.TryParseMessage(out mouseClickEventMessageOutput);
            Assert.AreEqual(RdapMessageType.MouseClickEventMessage, mouseClickEventMessageOutput.MessageType);
            Assert.AreEqual(9, mouseClickEventMessageOutput.Data.Length);
        }