Пример #1
0
        private async Task <List <INotification> > ProcessNotifications(CancelTradeItemResponse response)
        {
            var results = new List <INotification>();

            if (!response.CanceledOrders.IsNullOrEmpty())
            {
                foreach (var canceledOrder in response.CanceledOrders)
                {
                    results.Add(new NotificationModel
                    {
                        Type         = NotificationLevelType.Info,
                        Header       = $"Canceled Order",
                        Notification = $"Canceled {canceledOrder.Type} Order #{canceledOrder.Id}, {canceledOrder.Remaining:F8} @ {canceledOrder.Rate:F8}",
                        UserId       = canceledOrder.UserId
                    });
                }

                using (var context = DataContextFactory.CreateContext())
                {
                    if (!results.IsNullOrEmpty())
                    {
                        foreach (var notification in results)
                        {
                            context.Notifications.Add(new Entity.UserNotification
                            {
                                Title        = notification.Header,
                                Notification = notification.Notification,
                                Type         = notification.Type.ToString(),
                                UserId       = notification.UserId.ToString(),
                                Timestamp    = DateTime.UtcNow
                            });
                        }
                    }
                    await context.SaveChangesAsync().ConfigureAwait(false);
                }
            }

            return(results);
        }
Пример #2
0
        private async Task <List <ITradeDataUpdate> > ProcessDataUpdates(CancelTradeItemResponse response)
        {
            var cacheUsers      = new HashSet <Guid>();
            var cacheTradePairs = new HashSet <int>();
            var results         = new List <ITradeDataUpdate>();

            if (!response.CanceledOrders.IsNullOrEmpty())
            {
                foreach (var order in response.CanceledOrders)
                {
                    results.Add(new TradeOrderBookUpdate
                    {
                        Amount      = order.Amount,
                        Rate        = order.Rate,
                        Total       = order.Amount * order.Rate,
                        Type        = order.Type,
                        TradePairId = order.TradePairId,
                        Action      = TradeUpdateAction.Cancel
                    });

                    results.Add(new TradeOpenOrderUpdate
                    {
                        OrderId     = order.Id,
                        UserId      = order.UserId,
                        Amount      = order.Amount,
                        Rate        = order.Rate,
                        Total       = order.Amount * order.Rate,
                        Type        = order.Type,
                        TradePairId = order.TradePairId,
                        Remaining   = order.Remaining,
                        Status      = order.Status,
                        Action      = TradeUpdateAction.Cancel
                    });

                    cacheUsers.Add(order.UserId);
                    cacheTradePairs.Add(order.TradePairId);
                }
            }

            // Clear caches
            if (cacheTradePairs.Any())
            {
                foreach (var tradepair in cacheTradePairs)
                {
                    await ClearCache(tradepair);

                    if (cacheUsers.Any())
                    {
                        foreach (var user in cacheUsers)
                        {
                            await ClearCache(tradepair, user);

                            results.Add(new TradeBalanceUpdate
                            {
                                TradePairId = tradepair,
                                UserId      = user
                            });
                        }
                    }
                }
            }
            return(results);
        }