Example #1
0
        private void OnMessageFrame(MessageFrame frame)
        {
            if (_state != ServerState.Ready)
            {
                throw new Exception("Handshake not completed, should not have received a message frame.");
            }


            if (_payloadSerializer != null)
            {
                if (_payloadDotNetType != null)
                {
                    frame.Payload = frame.PayloadStream == null
                        ? _payloadSerializer.Deserialize(_payloadDotNetType, frame.PayloadBuffer.Array,
                                                         frame.PayloadBuffer.Offset,
                                                         frame.PayloadBuffer.Count)
                        : _payloadSerializer.Deserialize(_payloadDotNetType, frame.PayloadStream);
                }
                else
                {
                    frame.Payload = frame.PayloadStream == null
                        ? _payloadSerializer.Deserialize(frame.PayloadBuffer.Array,
                                                         frame.PayloadBuffer.Offset,
                                                         frame.PayloadBuffer.Count)
                        : _payloadSerializer.Deserialize(frame.PayloadStream);
                }
            }

            if (_ackSender == null || _ackSender.AddFrame(frame))
            {
                FrameReceived(this, frame);
            }
        }
Example #2
0
        public void PostDeserialize(IPayloadSerializer serializer, Stream stream)
        {
            lock (Event)
            {
                if (Arguments == null || Arguments.Length == 0)
                {
                    Types   = null;
                    Objects = null;
                }
                else
                {
                    Types   = new Type[Arguments.Length];
                    Objects = new object[Arguments.Length];
                    for (var i = 0; i < Arguments.Length; i++)
                    {
                        var arg = Arguments[i];
                        using (var mm = new MemoryStream(arg))
                        {
                            Objects[i] = serializer.Deserialize(serializer.SupportedContentType, mm, out Types[i]);
                        }
                    }
                }

                Arguments = null;
            }
        }
        T BuildResponse(SocketConnection sc)
        {
            byte[] responseBuffer = sc.GetDataBuffer();

            // Timeout occured
            if (responseBuffer.Length == 0)
            {
                throw new ClientException("Timeout");
            }

            // Create memorystream for deserialization purposes:
            // - skip the first 4 bytes (length (l) + control byte (cb))
            // - read up to boundaryMarker minus 7 (= l + cb + crlf)
            using (var ms = new MemoryStream(responseBuffer, 1, responseBuffer.Length - 1))
                using (var reader = new StreamReader(ms))
                {
                    var controlChar = responseBuffer[0];

                    switch (controlChar)
                    {
                    case WireFormat.SuccessControlChar:
                        return(serializer.Deserialize(ms));

                    case WireFormat.ErrorControlChar:
                        throw new ClientException(reader.ReadToEnd());

                    default:
                        throw new ClientException("Unknown control character detected");
                    }
                }
        }
 public static T Deserialize <T>(this byte[] data, IPayloadSerializer serializer)
 {
     using (var ms = new MemoryStream(data))
     {
         return((T)serializer.Deserialize(serializer.SupportedContentType, ms, out var type));
     }
 }
        T ITelemetrySerializer <T> .Deserialize(byte[] message)
        {
            T restored = (T)_serializer.Deserialize(message);

            // Here you can set the defaults if null is undesirable for nullable fields
            return(restored);
        }
Example #6
0
        private void OnMessageFrame(MessageFrame frame)
        {
            if (_state != ServerState.Ready)
            {
                throw new Exception("Handshake not completed, should not have received a message frame.");
            }


            // using acks and the specified frame have already been recieved.
            if (_ackSender != null && _ackSender.ShouldReAck(frame))
            {
                _ackSender.AckFrame(frame);
                return;
            }

            if (_payloadSerializer != null)
            {
                if (_payloadDotNetType != null)
                {
                    frame.Payload = frame.PayloadStream == null
                        ? _payloadSerializer.Deserialize(_payloadDotNetType, frame.PayloadBuffer.Array,
                                                         frame.PayloadBuffer.Offset,
                                                         frame.PayloadBuffer.Count)
                        : _payloadSerializer.Deserialize(_payloadDotNetType, frame.PayloadStream);
                }
                else
                {
                    frame.Payload = frame.PayloadStream == null
                        ? _payloadSerializer.Deserialize(frame.PayloadBuffer.Array,
                                                         frame.PayloadBuffer.Offset,
                                                         frame.PayloadBuffer.Count)
                        : _payloadSerializer.Deserialize(frame.PayloadStream);
                }
            }


            FrameReceived(this, frame);

            //Do it after the event trigger, so that any exception
            //doesn't ack the frame (as the client did not process it correctly).
            if (_ackSender != null)
            {
                _ackSender.AckFrame(frame);
            }
        }
Example #7
0
        public async Task <IEventMessage> ReadAsync(
            CancellationToken cancellationToken)
        {
            ChannelMessage message = await _channel
                                     .ReadAsync(cancellationToken);

            var payload = _serializer.Deserialize(message.Message);

            return(new EventMessage(message.Channel, payload));
        }
Example #8
0
        private void ConsumerLoop()
        {
            while (true)
            {
                lock (_lock)
                {
                    if (_queue.Count == 0)
                    {
                        Monitor.Wait(_lock);
                    }

                    var serialized = _queue.Dequeue();
                    var dto        = _serializer.Deserialize(serialized);

                    Console.WriteLine("Deserialized data:");
                    Console.WriteLine("{0}", dto);
                }
                Thread.Sleep(5000);
            }
        }