Пример #1
0
        /// <inheritdoc />
        public Command Deserialize(byte[] dataBytes)
        {
            var unpacked = MessagePackSerializer.Deserialize <Dictionary <string, byte[]> >(dataBytes);

            var command   = ObjectDeserializer.AsString(unpacked[nameof(Command.Type)]);
            var id        = ObjectDeserializer.AsGuid(unpacked[nameof(Command.Id)]);
            var timestamp = ObjectDeserializer.AsZonedDateTime(unpacked[nameof(Command.Timestamp)]);

            switch (command)
            {
            case nameof(AccountInquiry):
                return(new AccountInquiry(
                           this.identifierCache.TraderId(unpacked),
                           this.identifierCache.AccountId(unpacked),
                           id,
                           timestamp));

            case nameof(SubmitOrder):
                return(new SubmitOrder(
                           this.identifierCache.TraderId(unpacked),
                           this.identifierCache.AccountId(unpacked),
                           this.identifierCache.StrategyId(unpacked),
                           ObjectDeserializer.AsPositionId(unpacked),
                           this.orderSerializer.Deserialize(unpacked[nameof(SubmitOrder.Order)]),
                           id,
                           timestamp));

            case nameof(SubmitBracketOrder):
                return(new SubmitBracketOrder(
                           this.identifierCache.TraderId(unpacked),
                           this.identifierCache.AccountId(unpacked),
                           this.identifierCache.StrategyId(unpacked),
                           ObjectDeserializer.AsPositionId(unpacked),
                           new BracketOrder(
                               this.orderSerializer.Deserialize(unpacked[nameof(BracketOrder.Entry)]),
                               this.orderSerializer.Deserialize(unpacked[nameof(BracketOrder.StopLoss)]),
                               this.orderSerializer.DeserializeNullable(unpacked[nameof(BracketOrder.TakeProfit)])),
                           id,
                           timestamp));

            case nameof(ModifyOrder):
                return(new ModifyOrder(
                           this.identifierCache.TraderId(unpacked),
                           this.identifierCache.AccountId(unpacked),
                           ObjectDeserializer.AsOrderId(unpacked),
                           ObjectDeserializer.AsQuantity(unpacked[nameof(ModifyOrder.ModifiedQuantity)]),
                           ObjectDeserializer.AsPrice(unpacked[nameof(ModifyOrder.ModifiedPrice)]),
                           id,
                           timestamp));

            case nameof(CancelOrder):
                return(new CancelOrder(
                           this.identifierCache.TraderId(unpacked),
                           this.identifierCache.AccountId(unpacked),
                           ObjectDeserializer.AsOrderId(unpacked),
                           id,
                           timestamp));

            default:
                throw ExceptionFactory.InvalidSwitchArgument(command, nameof(command));
            }
        }