public async Task PublishAsync(BaseSubscription subscription, BaseMethod method) { await _hubContext .Clients .Group(subscription.GetSubscriptionString()) .SendCoreAsync(method.GetName(), method.GetArgs()); }
public SubscriptionToken Subscribe <TMessage>(Action <TMessage> action, ReferenceType referenceType = ReferenceType.Weak, SubscriptionPriority priority = SubscriptionPriority.Normal, string tag = null) where TMessage : Message { if (action == null) { throw new ArgumentNullException(nameof(action)); } BaseSubscription subscription = BuildSubscription(action, referenceType, priority, tag); return(SubscribeInternal(action, subscription)); }
public override Task <BaseResponse> Handle(InfoWebSocketConnection infoWebSocket, SubscribeCommand command) { if (command.Subscriptions == null || command.Subscriptions.Count < 1) { throw new BadRequestException("At least one subscription must be specified."); } foreach (var subsName in command.Subscriptions) { infoWebSocket.AddSubscription(SubscriptionsManager.GetOrAddSubscription(BaseSubscription.GetBySubscriptionName(subsName))); } return(Task.FromResult((BaseResponse) new SuccesResponse())); }
private SubscriptionToken SubscribeInternal <TMessage>(Action <TMessage> action, BaseSubscription subscription) where TMessage : Message { if (!_subscriptions.TryGetValue(typeof(TMessage), out var messageSubscriptions)) { messageSubscriptions = new ConcurrentDictionary <Guid, BaseSubscription>(); _subscriptions[typeof(TMessage)] = messageSubscriptions; } #if DEBUG Debug.WriteLine($"Adding subscription {subscription.Id} for {typeof(TMessage).Name}"); #endif messageSubscriptions[subscription.Id] = subscription; Task.Run(async() => await PublishSubscriberChangedMessage <TMessage>(messageSubscriptions)); return(new SubscriptionToken(subscription.Id, async() => await UnsubscribeInternal <TMessage>(subscription.Id), action)); }
public async Task UnsubscribeAsync(string connectionId, BaseSubscription subscription) { await _hubContext.Groups.RemoveFromGroupAsync(connectionId, subscription.GetSubscriptionString()); }