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(); } } }
public static bool TryGetSubscription(string name, out BaseSubscription subscription) { return(subscriptions.TryGetValue(name, out subscription)); }
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); }
async Task SendSubscriptionUpdate(BaseSubscription subscription, SubscriptionUpdateBase update, InfoWebSocketConnection connection) { await connection.SendSubscriptionUpdate(subscription, update); }