Exemplo n.º 1
0
        private async Task Handle(SpecialLiquidationOrderExecutionFailedEvent e, ICommandSender sender)
        {
            var executionInfo = await _operationExecutionInfoRepository.GetAsync <SpecialLiquidationOperationData>(
                operationName : OperationName,
                id : e.OperationId);

            if (executionInfo?.Data == null)
            {
                return;
            }

            if (executionInfo.Data.SwitchState(SpecialLiquidationOperationState.PriceReceived,
                                               SpecialLiquidationOperationState.OnTheWayToFail))
            {
                sender.SendCommand(new FailSpecialLiquidationInternalCommand
                {
                    OperationId  = e.OperationId,
                    CreationTime = _dateService.Now(),
                    Reason       = e.Reason
                }, _cqrsContextNamesSettings.TradingEngine);

                _chaosKitty.Meow(e.OperationId);

                await _operationExecutionInfoRepository.Save(executionInfo);
            }
        }
Exemplo n.º 2
0
        private async Task Handle(SpecialLiquidationOrderExecutionFailedEvent e, ICommandSender sender)
        {
            var executionInfo = await _operationExecutionInfoRepository.GetAsync <SpecialLiquidationOperationData>(
                operationName : OperationName,
                id : e.OperationId);

            if (executionInfo?.Data == null)
            {
                return;
            }

            if (PriceRequestRetryRequired(executionInfo.Data.RequestedFromCorporateActions))
            {
                var isDiscontinued = await FailIfInstrumentDiscontinued(executionInfo, sender);

                if (isDiscontinued)
                {
                    return;
                }

                if (executionInfo.Data.SwitchState(SpecialLiquidationOperationState.ExternalOrderExecuted,
                                                   SpecialLiquidationOperationState.PriceRequested))
                {
                    await InternalRetryPriceRequest(e.CreationTime, sender, executionInfo,
                                                    _marginTradingSettings.SpecialLiquidation.PriceRequestRetryTimeout.Value);

                    return;
                }
            }

            if (executionInfo.Data.SwitchState(SpecialLiquidationOperationState.ExternalOrderExecuted,
                                               SpecialLiquidationOperationState.OnTheWayToFail))
            {
                sender.SendCommand(new FailSpecialLiquidationInternalCommand
                {
                    OperationId  = e.OperationId,
                    CreationTime = _dateService.Now(),
                    Reason       = e.Reason
                }, _cqrsContextNamesSettings.TradingEngine);

                _chaosKitty.Meow(e.OperationId);

                await _operationExecutionInfoRepository.Save(executionInfo);
            }
        }