/// <summary> /// Subscribes the given client to messages of a given type. /// </summary> /// <param name="subscriber"> /// The subscriber. /// </param> /// /// <param name="messageType"> /// The message type. /// </param> /// /// <param name="context"> /// The context. /// </param> /// <returns> /// The task /// </returns> public Task Subscribe(Subscriber subscriber, MessageType messageType, ContextBag context) { var subscriptionKey = new SubscriptionKey(messageType); var update = new UpdateDefinitionBuilder <Subscription>().AddToSet(s => s.Subscribers, subscriber); return(this.collection.UpdateOneAsync( s => s.Id == subscriptionKey, update, new UpdateOptions() { IsUpsert = true })); }
/// <summary> /// Unsubscribes the given client from messages of given type. /// </summary> /// <param name="subscriber"> /// The subscriber. /// </param> /// /// <param name="messageType"> /// The message type. /// </param> /// /// <param name="context"> /// The context. /// </param> /// <returns> /// The task /// </returns> public Task Unsubscribe(Subscriber subscriber, MessageType messageType, ContextBag context) { var subscriptionKey = new SubscriptionKey(messageType); var update = new UpdateDefinitionBuilder <Subscription>().Pull(s => s.Subscribers, subscriber); return(this.collection.UpdateOneAsync( s => s.Id == subscriptionKey && s.Subscribers.Contains(subscriber), update, new UpdateOptions() { IsUpsert = false })); }