示例#1
0
        public async Task SendTransferReplyAsync(
            string id,
            string destinationAddress,
            TransferReplyMessage.TransferReplyMessageCode code)
        {
            var transaction = await _transactionsRepository.GetAsync(id);

            if (transaction == null)
            {
                throw new NullReferenceException();
            }

            if (transaction.Status != TransactionStatus.TransferRequested)
            {
                return; //todo: handle this case.
            }
            if (!_benefeciarySessionsDict.TryGetValue(transaction.SessionId, out var beneficiarySession))
            {
                return; //todo: handle this case.
            }
            await beneficiarySession.TransferReplyAsync(
                TransferReplyMessage.Create(
                    transaction.SessionId,
                    code,
                    destinationAddress));

            if (code == TransferReplyMessage.TransferReplyMessageCode.TransferAccepted)
            {
                transaction.Status             = TransactionStatus.TransferAllowed;
                transaction.DestinationAddress = destinationAddress;
            }
            else
            {
                transaction.Status = TransactionStatus.TransferForbidden;
                transaction.TransferDeclineCode = TransferReplyMessage.GetMessageCode(code);
            }

            await _transactionsRepository.UpdateAsync(transaction);
        }
示例#2
0
        private async Task TransferReplyMessageReceivedAsync(SessionMessageEvent <TransferReplyMessage> evt)
        {
            var transaction = await _transactionsRepository.GetBySessionIdAsync(evt.SessionId);

            if (transaction == null || transaction.Status != TransactionStatus.TransferRequested)
            {
                return; //todo: handle this case.
            }
            if (evt.Message.Message.MessageCode == TransferReplyMessage.GetMessageCode(TransferReplyMessage.TransferReplyMessageCode.TransferAccepted))
            {
                transaction.Status             = TransactionStatus.TransferAllowed;
                transaction.DestinationAddress = evt.Message.DestinationAddress;

                await _transactionsRepository.UpdateAsync(transaction);
            }
            else
            {
                transaction.Status = TransactionStatus.TransferForbidden;
                transaction.TransferDeclineCode = evt.Message.Message.MessageCode;
            }

            await _transactionsRepository.UpdateAsync(transaction);
        }