public async Task PublishAsync(BaseSubscription subscription, BaseMethod method)
 {
     await _hubContext
     .Clients
     .Group(subscription.GetSubscriptionString())
     .SendCoreAsync(method.GetName(), method.GetArgs());
 }
Example #2
0
        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()));
        }
Example #4
0
        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));
        }
Example #5
0
 public async Task UnsubscribeAsync(string connectionId, BaseSubscription subscription)
 {
     await _hubContext.Groups.RemoveFromGroupAsync(connectionId, subscription.GetSubscriptionString());
 }