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); }
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); }