Пример #1
0
        public PoshServer(int port)
        {
            string location = "ws://localhost:" + port + "/";

            FWampHost = new DefaultWampHost(location);
            FWampHost.Open();

            // Use this in order to publish events to subscribers.
            IWampTopicContainer topicContainer = FWampHost.TopicContainer;

            FAddTopic             = topicContainer.CreateTopicByUri("add", true);
            FUpdateAttributeTopic = topicContainer.CreateTopicByUri("update-attribute", true);
            FUpdateContentTopic   = topicContainer.CreateTopicByUri("update-content", true);
            FRemoveTopic          = topicContainer.CreateTopicByUri("remove", true);

            FWampHost.HostService(this, "");

            FWampHost.SessionCreated += SessionCreated;
            FWampHost.SessionClosed  += SessionClosed;
            //FWampHost.Listener.CallInvoked += PublishAll;

            //create event caller for svg
            SvgEventCaller              = new PoshSvgEventCaller(FWampHost);
            SvgEventCaller.CallInvoked += SvgEventCaller_CallInvoked;

            //publish all stuff aufter each call from remote
            AutoPublishAllAfterRemoteCall = true;
        }
        public SubscriptionDescriptorService(IWampHostedRealm realm) :
            base(new SubscriptionMetadataSubscriber(realm.TopicContainer), WampErrors.NoSuchSubscription)
        {
            IWampTopicContainer topicContainer = realm.TopicContainer;

            mTopicContainer = topicContainer;

            IObservable <IWampTopic> removed = GetTopicRemoved(topicContainer);

            var observable =
                from topic in GetTopicCreated(topicContainer)
                let topicRemoved = removed.Where(x => x == topic)
                                   let subscriptionAdded = GetSubscriptionAdded(topic, topicRemoved)
                                                           let subscriptionRemoved = GetSubscriptionRemoved(topic, topicRemoved)
                                                                                     select new { topic, subscriptionAdded, subscriptionRemoved };

            var addObservable =
                from item in observable
                from eventArgs in item.subscriptionAdded
                select new { Topic = item.topic, EventArgs = eventArgs };

            var removeObservable =
                from item in observable
                from eventArgs in item.subscriptionRemoved
                select new { Topic = item.topic, EventArgs = eventArgs };

            IDisposable addDisposable =
                addObservable.Subscribe(x => OnSubscriptionAdded(x.Topic, x.EventArgs));

            IDisposable removeDisposable =
                removeObservable.Subscribe(x => OnSubscriptionRemoved(x.Topic, x.EventArgs));

            mDisposable = new CompositeDisposable(addDisposable, removeDisposable);
        }
Пример #3
0
        public void TopicOnNextCallsSubjectOnNext()
        {
            WampPlayground playground = new WampPlayground();

            IWampHost host = playground.Host;

            IWampTopicContainer topicContainer = host.TopicContainer;

            host.Open();

            IWampChannel <MockRaw> channel =
                playground.CreateNewChannel();

            channel.Open();

            IWampTopic topic = null;

            topicContainer.TopicCreated +=
                (sender, args) => topic  = args.Topic;

            object            @event   = null;
            string            topicUri = "http://example.com/simple";
            ISubject <object> subject  = channel.GetSubject <object>(topicUri);

            subject.Subscribe(x => @event = x);

            Assert.That(topic, Is.Not.Null);
            Assert.That(topic.TopicUri, Is.EqualTo(topicUri));

            string value = "Test :)";

            topic.OnNext(value);

            Assert.That(@event, Is.EqualTo(value));
        }
 public static long Publish
     (this IWampTopicContainer container,
     PublishOptions options,
     string topicUri,
     object[] arguments,
     IDictionary <string, object> argumentKeywords)
 {
     if (arguments == null)
     {
         return(container.Publish(WampObjectFormatter.Value,
                                  options,
                                  topicUri));
     }
     else if (argumentKeywords == null)
     {
         return(container.Publish(WampObjectFormatter.Value,
                                  options,
                                  topicUri,
                                  arguments));
     }
     else
     {
         return(container.Publish(WampObjectFormatter.Value,
                                  options,
                                  topicUri,
                                  arguments,
                                  argumentKeywords));
     }
 }
 public SubscriptionMetadataSubscriber(IWampTopicContainer topicContainer)
 {
     mTopicContainer = topicContainer;
     mTopicContainer.CreateTopicByUri(mOnCreateTopicUri, true);
     mTopicContainer.CreateTopicByUri(mOnSubscribeTopicUri, true);
     mTopicContainer.CreateTopicByUri(mOnUnsubscribeTopicUri, true);
     mTopicContainer.CreateTopicByUri(mOnDeleteTopicUri, true);
 }
Пример #6
0
 public RegistrationMetadataSubscriber(IWampTopicContainer topicContainer)
 {
     mTopicContainer = topicContainer;
     mTopicContainer.CreateTopicByUri(mOnCreateTopicUri, true);
     mTopicContainer.CreateTopicByUri(mOnRegisterTopicUri, true);
     mTopicContainer.CreateTopicByUri(mOnUnregisterTopicUri, true);
     mTopicContainer.CreateTopicByUri(mOnDeleteTopicUri, true);
 }
 public static long Publish
     (this IWampTopicContainer container,
     PublishOptions options,
     string topicUri,
     params object[] arguments)
 {
     return(Publish(container, options, topicUri, arguments, null));
 }
 private static IObservable <IWampTopic> GetTopicCreated(IWampTopicContainer topicContainer)
 {
     return(Observable.FromEventPattern <WampTopicCreatedEventArgs>
                (x => topicContainer.TopicCreated += x,
                x => topicContainer.TopicCreated -= x)
            .Select(x => x.EventArgs.Topic)
            .Where(x => !WampRestrictedUris.IsRestrictedUri(x.TopicUri)));
 }
Пример #9
0
 public WampRawTopicContainer(IWampTopicContainer topicContainer,
                              IWampEventSerializer eventSerializer,
                              IWampBinding <TMessage> binding)
 {
     mTopicContainer  = topicContainer;
     mEventSerializer = eventSerializer;
     mBinding         = binding;
 }
Пример #10
0
 public WampPubSubServer(IWampTopicContainer topicContainer, IWampEventSerializer eventSerializer, IWampBinding <TMessage> binding, IWampUriValidator uriValidator)
 {
     mLogger            = LogProvider.GetLogger(this.GetType());
     mBinding           = binding;
     mUriValidator      = uriValidator;
     mEventSerializer   = eventSerializer;
     mRawTopicContainer = new WampRawTopicContainer <TMessage>(topicContainer, mEventSerializer, mBinding);
 }
Пример #11
0
 /// <summary>
 /// Specialized constructor for use only by derived classes.
 /// </summary>
 /// <param name="clientSessionId">Identifier for the client session.</param>
 /// <param name="formatter">The formatter.</param>
 /// <param name="metadataCatalog">The metadata catalog.</param>
 /// <param name="topicContainer">The topic container.</param>
 protected WampCraAuthenticator(string clientSessionId, IWampFormatter <TMessage> formatter,
                                IWampRpcMetadataCatalog metadataCatalog, IWampTopicContainer topicContainer)
 {
     mClientSessionId = clientSessionId;
     mFormatter       = formatter;
     mMetadataCatalog = metadataCatalog;
     mTopicContainer  = topicContainer;
     mPermissions     = new WampCraPermissionsMapper();
 }
Пример #12
0
        private static IDisposable ServerCode(WampHost host)
        {
            IWampHostedRealm realm = host.RealmContainer.GetRealmByName("realm1");

            IWampTopicContainer topicContainer = realm.TopicContainer;

            IWampTopic topic =
                topicContainer.GetOrCreateTopicByUri("com.myapp.topic1");

            IDisposable disposable = realm.Services.GetSubject <int>("com.myapp.topic1")
                                     .Subscribe(x => GetValue(x));

            return(disposable);
        }
Пример #13
0
        static void Main(string[] args)
        {
            // http://autobahn.ws/static/file/autobahnjs.html
            const string location = "ws://127.0.0.1:9000/";

            using (IWampHost host = new DefaultWampHost(location))
            {
                host.Open();
                // Use this in order to publish events to subscribers.
                IWampTopicContainer topicContainer = host.TopicContainer;
                Console.WriteLine("Server is running on " + location);
                Console.ReadLine();
            }
        }
Пример #14
0
 public SampleWampCraAuthenticator(string clientSessionId, IWampFormatter <TMessage> formatter, IWampRpcMetadataCatalog metadataCatalog, IWampTopicContainer topicContainer)
     : base(clientSessionId, formatter, metadataCatalog, topicContainer)
 {
 }
Пример #15
0
 public WampRealm(string name, IWampRpcOperationCatalog catalog, IWampTopicContainer topicContainer)
 {
     Name           = name;
     RpcCatalog     = catalog;
     TopicContainer = topicContainer;
 }
Пример #16
0
 public WampTestamentService(IWampHostedRealm realm)
 {
     mRealm               = realm;
     mTopicContainer      = realm.TopicContainer;
     realm.SessionClosed += OnSessionClosed;
 }
Пример #17
0
 public SessionMetadataSubscriber(IWampTopicContainer topicContainer)
 {
     mTopicContainer = topicContainer;
     mTopicContainer.CreateTopicByUri(mOnJoinUri, true);
     mTopicContainer.CreateTopicByUri(mOnLeaveUri, true);
 }