public void SetDeserializer_GetDeserializer()
 {
     var deserializer = new ProtobufMessageDeserializer();
     Func<Stream, IMessage> deserializerFunc = Serializer.Deserialize<TestMessage>;
     deserializer.SetDeserializer(1, deserializerFunc);
     Assert.AreEqual(deserializerFunc, deserializer.GetDeserializer(1));
 }
        protected override EventHandler <BasicDeliverEventArgs> CreateOnMessageReceivedEventHandler(IModel channel)
        {
            var deserializer = new ProtobufMessageDeserializer <ExecutionProcessedEvent>();

            void OnMessageReceived(object o, BasicDeliverEventArgs basicDeliverEventArgs)
            {
                try
                {
                    var message = deserializer.Deserialize(basicDeliverEventArgs.Body);

                    var orders = Mapper.Map <IEnumerable <Order> >(message).ToList();

                    foreach (var order in orders.Where(x => WalletIds.Contains(x.WalletId.ToString())))
                    {
                        Log.Info("Order from ME (ExecutionProcessedEvent)", context: $"order: {new {order.Id, order.Status, order.SequenceNumber}.ToJson()}");
                    }

                    Queue.Enqueue(new CustomQueueItem <IEnumerable <Order> >(orders,
                                                                             basicDeliverEventArgs.DeliveryTag, channel));
                }
                catch (Exception e)
                {
                    Log.Error(e);

                    channel.BasicReject(basicDeliverEventArgs.DeliveryTag, false);
                }
            }

            return(OnMessageReceived);
        }
        public void SetDeserializer_GetDeserializer()
        {
            var deserializer = new ProtobufMessageDeserializer();
            Func <Stream, IMessage> deserializerFunc = Serializer.Deserialize <TestMessage>;

            deserializer.SetDeserializer(1, deserializerFunc);
            Assert.AreEqual(deserializerFunc, deserializer.GetDeserializer(1));
        }
        public void Deserialize_non_mapped_MessageTypeId_throws_MessageDeserializationException()
        {
            var deserializer = new ProtobufMessageDeserializer();

            using (var mem = new MemoryStream())
            using (var writer = new BinaryWriter(mem))
            {
                writer.Write((ushort)1);
                mem.Position = 0;

                Assert.Throws<MessageDeserializationException>(() => deserializer.Deserialize(mem.ToArray()));
            }
        }
        public void Deserialize_non_mapped_MessageTypeId_throws_MessageDeserializationException()
        {
            var deserializer = new ProtobufMessageDeserializer();

            using (var mem = new MemoryStream())
                using (var writer = new BinaryWriter(mem))
                {
                    writer.Write((ushort)1);
                    mem.Position = 0;

                    Assert.Throws <MessageDeserializationException>(() => deserializer.Deserialize(mem.ToArray()));
                }
        }
        public void AssignAssemblyMessageTypes()
        {
            var deserializer = new ProtobufMessageDeserializer();
            deserializer.AssignAssemblyMessageTypes(Assembly.GetExecutingAssembly());

            using (var mem = new MemoryStream())
            using (var writer = new BinaryWriter(mem))
            {
                writer.Write((ushort)1);
                mem.Position = 0;

                var message = deserializer.Deserialize(mem.ToArray());
                Assert.AreEqual(typeof(TestMessage), message.GetType());
            }
        }
        public void Deserialize_existing_MessageTypeId()
        {
            var deserializer = new ProtobufMessageDeserializer();
            deserializer.SetDeserializer(1, Serializer.Deserialize<TestMessage>);

            using (var mem = new MemoryStream())
            using (var writer = new BinaryWriter(mem))
            {
                writer.Write((ushort)1);
                mem.Position = 0;

                var message = deserializer.Deserialize(mem.ToArray());
                Assert.AreEqual(typeof(TestMessage), message.GetType());
            }
        }
        public void AssignAssemblyMessageTypes()
        {
            var deserializer = new ProtobufMessageDeserializer();

            deserializer.AssignAssemblyMessageTypes(Assembly.GetExecutingAssembly());

            using (var mem = new MemoryStream())
                using (var writer = new BinaryWriter(mem))
                {
                    writer.Write((ushort)1);
                    mem.Position = 0;

                    var message = deserializer.Deserialize(mem.ToArray());
                    Assert.AreEqual(typeof(TestMessage), message.GetType());
                }
        }
        public void Deserialize_existing_MessageTypeId()
        {
            var deserializer = new ProtobufMessageDeserializer();

            deserializer.SetDeserializer(1, Serializer.Deserialize <TestMessage>);

            using (var mem = new MemoryStream())
                using (var writer = new BinaryWriter(mem))
                {
                    writer.Write((ushort)1);
                    mem.Position = 0;

                    var message = deserializer.Deserialize(mem.ToArray());
                    Assert.AreEqual(typeof(TestMessage), message.GetType());
                }
        }
        protected override EventHandler <BasicDeliverEventArgs> CreateOnMessageReceivedEventHandler(IModel channel)
        {
            var orderPlacedDeserializer    = new ProtobufMessageDeserializer <OrderPlacedEvent>();
            var orderCancelledDeserializer = new ProtobufMessageDeserializer <OrderCancelledEvent>();

            void OnMessageReceived(object o, BasicDeliverEventArgs basicDeliverEventArgs)
            {
                try
                {
                    switch (basicDeliverEventArgs.RoutingKey)
                    {
                    case nameof(OrderPlacedEvent):
                        Queue.Enqueue(new CustomQueueItem <OrderEvent>(
                                          Mapper.Map <OrderEvent>(
                                              orderPlacedDeserializer.Deserialize(basicDeliverEventArgs.Body)),
                                          basicDeliverEventArgs.DeliveryTag, channel));
                        break;

                    case nameof(OrderCancelledEvent):
                        Queue.Enqueue(new CustomQueueItem <OrderEvent>(
                                          Mapper.Map <OrderEvent>(
                                              orderCancelledDeserializer.Deserialize(basicDeliverEventArgs.Body)),
                                          basicDeliverEventArgs.DeliveryTag, channel));
                        break;

                    default:
                        throw new ArgumentOutOfRangeException(basicDeliverEventArgs.RoutingKey);
                    }
                }
                catch (Exception e)
                {
                    Log.Error(e);

                    channel.BasicReject(basicDeliverEventArgs.DeliveryTag, false);
                }
            }

            return(OnMessageReceived);
        }
        protected override EventHandler <BasicDeliverEventArgs> CreateOnMessageReceivedEventHandler(IModel channel)
        {
            var deserializer = new ProtobufMessageDeserializer <ExecutionEvent>();

            void OnMessageReceived(object o, BasicDeliverEventArgs basicDeliverEventArgs)
            {
                try
                {
                    var message = deserializer.Deserialize(basicDeliverEventArgs.Body);

                    Queue.Enqueue(new CustomQueueItem <ExecutionEvent>(message,
                                                                       basicDeliverEventArgs.DeliveryTag, channel));
                }
                catch (Exception e)
                {
                    Log.Error(e);

                    channel.BasicReject(basicDeliverEventArgs.DeliveryTag, false);
                }
            }

            return(OnMessageReceived);
        }