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); }