예제 #1
0
 public void Send(IMessageReader reader)
 {
     int bytesRead = 0;
     byte[] buffer = new byte[1024];
     do
     {
         bytesRead = reader.Read(buffer, 0, buffer.Length);
     } while (bytesRead > 0);
 }
예제 #2
0
        private void ConvertHeaders(IMessageReader input, IMessageBuilder output)
        {
            var headerCount = input.ItemCount;
            output.BeginHeaders(headerCount);

            for (; headerCount > 0; headerCount--)
            {
                input.Read();
                output.WriteHeader(input.PropertyName, input.StringValue);
            }
            output.EndHeaders();
        }
예제 #3
0
        private void ConvertHeaders(IMessageReader input, IMessageBuilder output)
        {
            var headerCount = input.ItemCount;

            output.BeginHeaders(headerCount);

            for (; headerCount > 0; headerCount--)
            {
                input.Read();
                output.WriteHeader(input.PropertyName, input.StringValue);
            }
            output.EndHeaders();
        }
예제 #4
0
 public void ReadLoop(IMessageReader reader)
 {
     while (true)
     {
         var message = reader.Read();
         if (message != null)
         {
             if (_tasks.ContainsKey(message.StreamId))
             {
                 _tasks[message.StreamId].SetResult(message);
             }
         }
     }
 }
예제 #5
0
        private void ConvertArrayContent(IMessageReader reader, IObjectBuilder builder)
        {
            var itemCount = reader.ItemCount;
            builder.BeginArray(itemCount);

            for (; itemCount > 0; itemCount--)
            {
                builder.BeginItem();
                reader.Read();

                ConvertValue(reader, builder);
                builder.EndItem();
            }

            builder.EndArray();
        }
예제 #6
0
        private void ConvertArrayContent(IMessageReader reader, IObjectBuilder builder)
        {
            var itemCount = reader.ItemCount;

            builder.BeginArray(itemCount);

            for (; itemCount > 0; itemCount--)
            {
                builder.BeginItem();
                reader.Read();

                ConvertValue(reader, builder);
                builder.EndItem();
            }

            builder.EndArray();
        }
예제 #7
0
        private void ConvertStructContent(IMessageReader reader, IObjectBuilder builder)
        {
            var elementCount = reader.ItemCount;

            builder.BeginStruct(reader.ItemCount);

            for (; elementCount > 0; elementCount--)
            {
                builder.BeginItem();
                reader.Read();

                builder.WritePropertyName(reader.PropertyName);

                ConvertValue(reader, builder);
                builder.EndItem();
            }

            builder.EndStruct();
        }
예제 #8
0
        public void Convert(IMessageReader input, IMessageBuilder output)
        {
            if (!input.Read())
            {
                throw new ProtocolException("Packet Header not recognized.");
            }

            output.BeginMessage(input.MessageType);

            input.Read();
            if (input.ReadState == ReadState.Headers)
            {
                ConvertHeaders(input, output);
                input.Read();
            }

            output.BeginContent();
            if (input.MessageType == MessageType.Request)
            {
                input.Read();
                output.SetMethod(input.StringValue);

                input.Read();
                ConvertArrayContent(input, output);
            }
            else
            {
                while(input.Read() && input.ReadState == ReadState.Body)
                {
                    ConvertValue(input, output);
                }
            }
            output.EndContent();
            output.EndMessage();

            input.Read();
            if (input.ReadState != ReadState.EndOfFile)
            {
                throw new ProtocolException("Expected EndOfFile");
            }
        }
예제 #9
0
        public void Convert(IMessageReader input, IMessageBuilder output)
        {
            if (!input.Read())
            {
                throw new ProtocolException("Packet Header not recognized.");
            }

            output.BeginMessage(input.MessageType);

            input.Read();
            if (input.ReadState == ReadState.Headers)
            {
                ConvertHeaders(input, output);
                input.Read();
            }

            output.BeginContent();
            if (input.MessageType == MessageType.Request)
            {
                input.Read();
                output.SetMethod(input.StringValue);

                input.Read();
                ConvertArrayContent(input, output);
            }
            else
            {
                while (input.Read() && input.ReadState == ReadState.Body)
                {
                    ConvertValue(input, output);
                }
            }
            output.EndContent();
            output.EndMessage();

            input.Read();
            if (input.ReadState != ReadState.EndOfFile)
            {
                throw new ProtocolException("Expected EndOfFile");
            }
        }
예제 #10
0
 public IMessage Read() => _messageReader.Read();
예제 #11
0
 private static void Read(IMessageReader reader)
 {
     Log.Info("connecting...");
     try
     {
         using(reader)
         {
             Message message;
             while((message = reader.Read()) != null)
             {
                 Log.Info(message.ToString());
             }
         }
         Log.Info("disconnected");
     }
     catch(Exception exc)
     {
         Log.Error(exc);
     }
 }
예제 #12
0
        private void ConvertStructContent(IMessageReader reader, IObjectBuilder builder)
        {
            var elementCount = reader.ItemCount;
            builder.BeginStruct(reader.ItemCount);

            for (; elementCount > 0; elementCount--)
            {
                builder.BeginItem();
                reader.Read();

                builder.WritePropertyName(reader.PropertyName);

                ConvertValue(reader, builder);
                builder.EndItem();
            }

            builder.EndStruct();
        }
예제 #13
0
        public static MessageContent Read(Message message)
        {
            IMessageReader reader = GetReader(message);

            return(reader.Read(message));
        }
예제 #14
0
 /// <inheritdoc />
 public IStringMessage Read() => _messageReader.Read();