Beispiel #1
0
 public void SendSubscriptionUpdate(BaseSubscription subscription, SubscriptionUpdateBase subsUpdates)
 {
     foreach (var connection in connections)
     {
         Task.Factory.StartNew(async() => await SendSubscriptionUpdate(subscription, subsUpdates, connection.Value));
     }
 }
        public override Task <BaseResponse> Handle(InfoWebSocketConnection infoWebSocket, UnsubscribeCommand command)
        {
            if (command.Subscriptions.Count < 0)
            {
                throw new BadRequestException("At least one subscription must be specified.");
            }

            foreach (var subs in command.Subscriptions)
            {
                var subscription = Context.SubscriptionsManager.GetOrAddSubscription(BaseSubscription.GetBySubscriptionName(subs));
                infoWebSocket.RemoveSubsctioption(subscription);
            }
            return(Task.FromResult((BaseResponse) new SuccesResponse {
                RequestId = command.RequestId
            }));
        }
        public async Task SendSubscriptionUpdate(BaseSubscription baseSubscription, SubscriptionUpdateBase update)
        {
            if (Subscriptions.TryGetValue(baseSubscription, out var lastUpdate))
            {
                var @lock = locks.GetOrAdd(baseSubscription, (_) => new SemaphoreSlim(1));
                await @lock.WaitAsync();

                try
                {
                    var updateOfInterest = update.GetUpdateForDate(lastUpdate);
                    if (updateOfInterest == null)
                    {
                        return;
                    }
                    Subscriptions[baseSubscription] = updateOfInterest.UpdateDate;
                    await SendMessage(updateOfInterest);
                }
                finally
                {
                    @lock.Release();
                }
            }
        }
Beispiel #4
0
 public static bool TryGetSubscription(string name, out BaseSubscription subscription)
 {
     return(subscriptions.TryGetValue(name, out subscription));
 }
Beispiel #5
0
 public static BaseSubscription GetOrAddSubscription(BaseSubscription subscription)
 {
     return(subscriptions.GetOrAdd(subscription.Name, subscription));
 }
 public void RemoveSubsctioption(BaseSubscription baseSubscription)
 {
     Subscriptions.TryRemove(baseSubscription, out _);
 }
 public void AddSubscription(BaseSubscription baseSubscription)
 {
     Subscriptions.TryAdd(baseSubscription, default);
 }
Beispiel #8
0
 async Task SendSubscriptionUpdate(BaseSubscription subscription, SubscriptionUpdateBase update, InfoWebSocketConnection connection)
 {
     await connection.SendSubscriptionUpdate(subscription, update);
 }