示例#1
0
        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);
        }
示例#2
0
 internal InternalSubListener([NotNull] string uri,
                              [NotNull] ISubListener listener,
                              bool isSub)
 {
     this._uri      = uri;
     this._listener = listener;
     this._isSub    = isSub;
 }
示例#3
0
 internal void InterestedIn(
     [NotNull] string uri,
     [NotNull] ISubListener listener)
 {
     lock (_subscriptions)
     {
         _subscriptions.Add(new InternalSubListener(uri, listener, false));
     }
 }