public async Task NotifyUser(string clientId)
        {
            var pushSettings = await _clientSettingsRepository.GetSettings <PushNotificationsSettings>(clientId);

            if (pushSettings.Enabled)
            {
                var clientAcc = await _clientAccountsRepository.GetByIdAsync(clientId);

                await _appNotifications.SendDataNotificationToAllDevicesAsync(new[] { clientAcc.NotificationsId }, NotificationType.OffchainRequest, "Wallet");
            }
        }
Esempio n. 2
0
        public async Task ProcessInMessage(TransactionToSignMsg msg)
        {
            var msgJson = msg.ToJson();
            var logTask = _log.WriteInfoAsync(nameof(ClientSignRequestHandler), nameof(ProcessInMessage), msgJson, "Message received");

            try
            {
                var tx = await _bitCoinTransactionsRepository.FindByTransactionIdAsync(msg.TransactionId.ToString());

                if (tx == null)
                {
                    await _log.WriteWarningAsync(nameof(ClientSignRequestHandler), nameof(ProcessInMessage), msgJson, "No tx found");

                    throw new Exception("No tx found");
                }

                var context = tx.GetBaseContextData();

                var clientAccountsDict = (await _clientAccountsRepository.GetByIdAsync(context.SignsClientIds)).ToDictionary(x => x.Id);

                foreach (var id in context.SignsClientIds)
                {
                    if (_settings.LykkeAccounts.Contains(id))
                    {
                        await _signedMultisigTransactionsSender.SendTransaction(new SignedTransaction
                        {
                            TransactionId = msg.TransactionId,
                            Transaction   = msg.Transaction
                        });
                    }
                    else
                    {
                        await _unsignedTransactionsRepository.InsertAsync(new UnsignedTransaction
                        {
                            ClientId = id,
                            Hex      = msg.Transaction,
                            Id       = msg.TransactionId.ToString()
                        });

                        await _appNotifications.SendDataNotificationToAllDevicesAsync(new[] { clientAccountsDict[id].NotificationsId }, NotificationType.NeedTransactionSign, "Wallet");
                    }
                }
            }
            catch (Exception ex)
            {
                await _log.WriteErrorAsync(nameof(ClientSignRequestHandler), nameof(ProcessInMessage), msg.ToJson(), ex);
            }
            finally
            {
                await logTask;
            }
        }