Exemplo n.º 1
0
        private async Task SessionReplyMessageReceivedAsync(SessionMessageEvent <SessionReplyMessage> evt)
        {
            var transaction = await _transactionsRepository.GetBySessionIdAsync(evt.SessionId);

            if (!_originatorSessionsDict.TryGetValue(transaction.SessionId, out var originatorSession))
            {
                return; //todo: handle this case.
            }
            transaction.CounterPartyVasp = evt.Message.Vasp;

            if (evt.Message.Message.MessageCode ==
                SessionReplyMessage.GetMessageCode(SessionReplyMessage.SessionReplyMessageCode.SessionAccepted))
            {
                transaction.Status = TransactionStatus.SessionConfirmed;

                await originatorSession.TransferRequestAsync(
                    _transactionDataService.GetOriginatorFromTx(transaction),
                    _transactionDataService.GetBeneficiaryFromTx(transaction),
                    transaction.Asset,
                    transaction.Amount);

                transaction.Status = TransactionStatus.TransferRequested;
            }
            else
            {
                transaction.Status             = TransactionStatus.SessionDeclined;
                transaction.SessionDeclineCode = evt.Message.Message.MessageCode;
            }

            await _transactionsRepository.UpdateAsync(transaction);
        }
Exemplo n.º 2
0
        private async Task TransferRequestMessageReceivedAsync(SessionMessageEvent <TransferRequestMessage> evt)
        {
            var transaction = await _transactionsRepository.GetBySessionIdAsync(evt.SessionId);

            if (transaction == null || transaction.Status != TransactionStatus.SessionConfirmed)
            {
                return; //todo: handle this case.
            }
            transaction.Status = TransactionStatus.TransferRequested;
            _transactionDataService.FillTransactionData(transaction, evt.Message);

            await _transactionsRepository.UpdateAsync(transaction);
        }
Exemplo n.º 3
0
        private async Task TransferDispatchMessageReceivedAsync(SessionMessageEvent <TransferDispatchMessage> evt)
        {
            var transaction = await _transactionsRepository.GetBySessionIdAsync(evt.SessionId);

            if (transaction == null || transaction.Status != TransactionStatus.TransferAllowed)
            {
                return; //todo: handle this case.
            }
            transaction.TransactionHash     = evt.Message.Transaction.TransactionId;
            transaction.SendingAddress      = evt.Message.Transaction.SendingAddress;
            transaction.TransactionDateTime = evt.Message.Transaction.DateTime;
            transaction.Status = TransactionStatus.TransferDispatched;

            await _transactionsRepository.UpdateAsync(transaction);
        }
Exemplo n.º 4
0
        private async Task SessionRequestMessageReceivedAsync(SessionMessageEvent <SessionRequestMessage> evt)
        {
            var transaction = await _transactionsRepository.GetBySessionIdAsync(evt.SessionId);

            if (transaction == null)
            {
                return; //todo: handle this case.
            }
            transaction.CounterPartyVasp = evt.Message.Vasp;
            transaction.Status           = TransactionStatus.SessionRequested;

            await _transactionsRepository.UpdateAsync(transaction);

            if (_vaspCodeManager.IsAutoConfirmedVaspCode(transaction.CounterPartyVasp.GetVaspCode()))
            {
                await SendSessionReplyAsync(transaction.Id, SessionReplyMessage.SessionReplyMessageCode.SessionAccepted);
            }
        }
Exemplo n.º 5
0
        private async Task TransferConfirmationMessageReceivedAsync(SessionMessageEvent <TransferConfirmationMessage> evt)
        {
            var transaction = await _transactionsRepository.GetBySessionIdAsync(evt.SessionId);

            if (transaction == null || transaction.Status != TransactionStatus.TransferDispatched)
            {
                return; //todo: handle this case.
            }
            transaction.Status = TransactionStatus.TransferConfirmed;

            await _transactionsRepository.UpdateAsync(transaction);

            if (!_originatorSessionsDict.TryGetValue(transaction.SessionId, out var originatorSession))
            {
                return; //todo: handle this case.
            }
            await originatorSession.TerminateAsync(TerminationMessage.TerminationMessageCode.SessionClosedTransferOccured);

            await _transactionsRepository.UpdateAsync(transaction);
        }
Exemplo n.º 6
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);
        }