Exemplo n.º 1
0
        public void Subscribe(SubscriptionRequest request)
        {
            if (request == null)
                throw new ArgumentNullException ("request");
            if (request.Topic == null)
                throw new ArgumentException ("request topic is null");
            if (request.Callback == null)
                throw new ArgumentException ("request callback is null");
            if (!String.IsNullOrEmpty (request.Topic.Fragment))
                throw new ArgumentException ("request topic must not contain fragment");
            if (!String.IsNullOrEmpty (request.Callback.Fragment))
                throw new ArgumentException ("request callback must not contain fragment");

            if (request.Secret != null)
                throw new NotSupportedException ("Secure subscription is not supported yet");

            VerifyFetchPolicy (request.Topic, request.Callback);

            if (request.Verify == "sync") {
                var proxy = new WebChannelFactory<ISub> (request.Callback).CreateChannel ();
                proxy.VerifySubscribe (new VerifySubscribeRequest () {
                    Mode = request.Mode,
                    Topic = request.Topic,
                    LeaseSeconds = request.LeaseSeconds,
                    VerifyToken = request.VerifyToken });

            }
            List<Uri> list;
            if (!state.Entries.TryGetValue (request.Topic, out list))
                state.Entries [request.Topic] = list = new List<Uri> ();
            list.Add (request.Callback);

            save_state_handler (state);
        }