public MercuryResponse Subscribe([NotNull] string uri, [NotNull] ISubListener listener) { var response = SendSync(RawMercuryRequest.Sub(uri)); if (response.StatusCode != 200) { throw new PubSubException(response.StatusCode); } if (response.Payload.Any()) { foreach (var payload in response.Payload) { var sub = Subscription.Parser.ParseFrom(payload); lock (_subscriptions) { _subscriptions.Add(new InternalSubListener(sub.Uri, listener, true)); } } } else { lock (_subscriptions) { _subscriptions.Add(new InternalSubListener(uri, listener, true)); } } Debug.WriteLine($"Subscribed successfully to {uri}!"); return(response); }
internal InternalSubListener([NotNull] string uri, [NotNull] ISubListener listener, bool isSub) { this._uri = uri; this._listener = listener; this._isSub = isSub; }
internal void InterestedIn( [NotNull] string uri, [NotNull] ISubListener listener) { lock (_subscriptions) { _subscriptions.Add(new InternalSubListener(uri, listener, false)); } }