/// <summary>
        /// Hosts a WAMP meta-api service describing the given realm.
        /// </summary>
        /// <param name="hostedRealm">The given realm.</param>
        /// <returns>A disposable: disposing it will unregister the hosted meta-api service.</returns>
        public static IDisposable HostMetaApiService(this IWampHostedRealm hostedRealm)
        {
            WampRealmDescriptorService service = new WampRealmDescriptorService(hostedRealm);

            CompositeDisposable disposable =
                HostDisposableService(hostedRealm, service, CalleeRegistrationInterceptor.Default);

            BrokerFeatures brokerFeatures = hostedRealm.Roles.Broker.Features;
            DealerFeatures dealerFeatures = hostedRealm.Roles.Dealer.Features;

            brokerFeatures.SessionMetaApi      = true;
            brokerFeatures.SubscriptionMetaApi = true;
            dealerFeatures.SessionMetaApi      = true;
            dealerFeatures.RegistrationMetaApi = true;

            IDisposable featureDisposable = Disposable.Create(() =>
            {
                brokerFeatures.SessionMetaApi      = null;
                brokerFeatures.SubscriptionMetaApi = null;
                dealerFeatures.SessionMetaApi      = null;
                dealerFeatures.RegistrationMetaApi = null;
            });

            disposable.Add(featureDisposable);

            return(disposable);
        }
Example #2
0
        private static void HostCode()
        {
            DefaultWampAuthenticationHost host =
                new DefaultWampAuthenticationHost("ws://127.0.0.1:8080/ws",
                                                  new WampCraUserDbAuthenticationFactory(new MyAuthenticationProvider(),
                                                                                         new MyUserDb()));

            IWampHostedRealm realm = host.RealmContainer.GetRealmByName("realm1");

            string[] topics = new[]
            {
                "com.example.topic1",
                "com.foobar.topic1",
                "com.foobar.topic2"
            };

            foreach (string topic in topics)
            {
                string currentTopic = topic;

                realm.Services.GetSubject <string>(topic).Subscribe
                    (x => Console.WriteLine("event received on {0}: {1}", currentTopic, x));
            }

            realm.Services.RegisterCallee(new Add2Service()).Wait();

            host.Open();
        }
        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);
        }
Example #4
0
        public GameManager(BoxOptionsApiSettings settings, IGameDatabase database, ICoefficientCalculator calculator,
                           IAssetQuoteSubscriber quoteFeed, IWampHostedRealm wampRealm, IMicrographCache micrographCache, IBoxConfigRepository boxConfigRepository, ILogRepository logRepository, ILog appLog, IHistoryHolder historyHolder)
        {
            this.database              = database;
            this.calculator            = calculator;
            this._assetQuoteSubscriber = quoteFeed;
            this.settings              = settings;
            this.logRepository         = logRepository;
            this.appLog              = appLog;
            this.wampRealm           = wampRealm;
            this.boxConfigRepository = boxConfigRepository;
            this.micrographCache     = micrographCache;
            _historyHolder           = historyHolder;
            _coefficientCache        = new CoefficientCache();

            if (this.settings != null && this.settings != null && this.settings.GameManager != null)
            {
                MaxUserBuffer = this.settings.GameManager.MaxUserBuffer;
            }

            GameManagerId = Guid.NewGuid().ToString();
            userList      = new List <UserState>();
            betCache      = new List <GameBet>();
            assetCache    = new Dictionary <string, PriceCache>();

            this._assetQuoteSubscriber.MessageReceived += QuoteFeed_MessageReceived;

            //calculateBoxConfig = null;
            dbBoxConfig = Task.Run(() => LoadBoxParameters()).Result;
            Console.WriteLine("Db Box Config = [{0}]", string.Join(",", dbBoxConfig.Select(b => b.AssetPair)));

            coefStatus = new Dictionary <string, string>();

            _historyHolder.InitializationFinished += HistoryHolder_InitializationFinished;
        }
Example #5
0
        public static IDisposable EnableDistributedBackplane(IWampHostedRealm realm)
        {
            IPublishSubscribe publishSubscribe = new PublishSubscribeBuilder(new WireSerializer()).Build();

            Proto.ClusterBuilder.RunSeededLocalCluster();
            return(realm.EnableDistributedBackplane(publishSubscribe));
        }
Example #6
0
 public ConfirmationCommandHandler(
     IWampHostedRealm realm,
     ISessionCache sessionCache)
 {
     _subject      = realm?.Services.GetSubject(Topic);
     _sessionCache = sessionCache;
 }
Example #7
0
 public WampSessionManagementService(IWampHostedRealm realm, IWampUriValidator uriValidator = null)
 {
     mRealm                 = realm;
     mUriValidator          = uriValidator ?? new LooseUriValidator();
     mRealm.SessionCreated += OnSessionCreated;
     mRealm.SessionClosed  += OnSessionClosed;
 }
Example #8
0
        public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILog appLog, IApplicationLifetime appLifetime)
        {
            IWampHost        host  = ApplicationContainer.Resolve <IWampHost>();
            IWampHostedRealm realm = ApplicationContainer.Resolve <IWampHostedRealm>();
            var rpcMethods         = ApplicationContainer.Resolve <IRpcMethods>();


            appLifetime.ApplicationStopped.Register(() =>
            {
                ApplicationContainer.Dispose();
            });

            appLifetime.ApplicationStarted.Register(() =>
                                                    realm.Services.RegisterCallee(rpcMethods).Wait()
                                                    );

            app.UseMvc();
            app.UseSwagger();
            app.UseSwaggerUi("swagger/ui/index");

            app.Map("/ws", builder =>
            {
                builder.UseWebSockets(new WebSocketOptions {
                    KeepAliveInterval = TimeSpan.FromMinutes(1)
                });

                host.RegisterTransport(new AspNetCoreWebSocketTransport(builder),
                                       new JTokenJsonBinding());
            });

            host.Open();

            appLog.WriteInfoAsync("BoxOptionsServer", "Startup.Configure", null, string.Format("Lykke.BoxOptionsServer [{0}] started.", Microsoft.Extensions.PlatformAbstractions.PlatformServices.Default.Application.ApplicationVersion));
        }
Example #9
0
 public OperationsProjection(
     IWampHostedRealm realm,
     ISessionCache sessionCache)
 {
     _subject      = realm?.Services.GetSubject(Topic);
     _sessionCache = sessionCache;
 }
Example #10
0
        private void StartWampRouter()
        {
            _host = new WampAuthenticationHost(new UserNameBasedAuthenticationFactory());

            string routeUrl = $"{UrlUtils.AdminFolderName}/{WampConsoleUrl}";

            if (routeUrl.StartsWith("/"))
            {
                routeUrl = routeUrl.Substring(1);
            }

            _host.RegisterTransport(
                new AspNetWebSocketTransport(routeUrl, new UserNameBasedCookieAuthenticationFactory()),
                new JTokenJsonBinding(new JsonSerializer
            {
                ContractResolver = new CamelCasePropertyNamesContractResolver()
            }));

            IWampHostedRealm realm = _host.RealmContainer.GetRealmByName(DefaultRealmName);

            realm.SessionCreated += SessionCreated;
            realm.SessionClosed  += SessionRemoved;
            _host.Open();

            FixWampRoute(routeUrl);
        }
Example #11
0
 private Server()
 {
     _wampHost = new DefaultWampHost(Configs.ServerAddress);
     //
     _wampHost.Open();
     //
     _realm = _wampHost.RealmContainer.GetRealmByName("realm");
     _realm.SessionCreated +=
         (sender, args) =>
     {
         CurrentSessions++;
         Logger.Info(sender + " session created: " + args.SessionId + " details=" + args.Details);
     };
     _realm.SessionClosed +=
         (sender, args) =>
     {
         CurrentSessions--;
         Logger.Info(sender + " session closed : " + args.SessionId + " reason=" + args.Reason +
                     " closeType=" + args.CloseType);
     };
     _realm.TopicContainer.TopicCreated +=
         (sender, args) =>
     {
         _topics.TryAdd(args.Topic.TopicUri, new TopicView(args.Topic));
         Logger.Info(sender + " topic created: " + args.Topic.TopicUri);
     };
     _realm.TopicContainer.TopicRemoved +=
         (sender, args) =>
     {
         TopicView t;
         _topics.TryRemove(args.Topic.TopicUri, out t);
         Logger.Info(sender + " topic removed: " + t);
     };
     _realm.TopicContainer.Topics.ForEach(t => _topics.TryAdd(t.TopicUri, new TopicView(t)));
     //
     Observable.Timer(TimeSpan.FromSeconds(0), TimeSpan.FromSeconds(1 /*intervalSeconds*/)).Subscribe(l =>
     {
         var ticks = Rate; // produce 1000 events each second
         for (var t = 0; t <= ticks / 10; ++t)
         {
             Parallel.For(t * 10, (t + 1) * 10, i =>
             {
                 var random   = new Random((int)(DateTime.Now.Ticks + i));
                 var topicUri = string.Intern(Configs.SUBJECT_ + random.Next(0, Configs.N_SUBJECTS));
                 TopicView topicView;
                 if (_topics.TryGetValue(topicUri, out topicView))
                 {
                     var wsEvent = new WsEvent(Math.Round(random.NextDouble() * 100000) / 100000.0);
                     topicView.Publish(wsEvent);
                     NumPublished = wsEvent.Id;
                     if (wsEvent.Id % 10000 == 0)
                     {
                         Logger.Info("Published " + wsEvent.Id + " events");
                     }
                 }
             });
         }
     });
 }
Example #12
0
        public SessionDescriptorService(IWampHostedRealm realm)
        {
            mRealm      = realm;
            mSubscriber = new SessionMetadataSubscriber(realm.TopicContainer);

            mRealm.SessionClosed  += OnSessionClosed;
            mRealm.SessionCreated += OnSessionCreated;
        }
 public IndicesSubscriber(
     IRabbitMqSubscribeHelper rabbitMqSubscribeHelper,
     string connectionString,
     IWampHostedRealm realm)
 {
     _rabbitMqSubscribeHelper = rabbitMqSubscribeHelper;
     _connectionString        = connectionString;
     _realm = realm;
 }
Example #14
0
 public HistoryExportProjection(
     ILog log,
     IWampHostedRealm realm,
     ISessionCache sessionCache)
 {
     _log          = log;
     _subject      = realm?.Services.GetSubject(Topic);
     _sessionCache = sessionCache;
 }
Example #15
0
 public MarketDataProjection(
     [NotNull] IWampHostedRealm realm,
     TimeSpan cacheInterval,
     IMemoryCache memoryCache)
 {
     _realm         = realm;
     _cacheInterval = cacheInterval;
     _memoryCache   = memoryCache;
     _subject       = _realm.Services.GetSubject <MarketDataChangedEvent>(MarketDataTopic);
 }
Example #16
0
 public AssetsProjection(
     [NotNull] ILog log,
     [NotNull] IWampHostedRealm realm,
     [NotNull] IMapper mapper)
 {
     _log               = log.CreateComponentScope(nameof(AssetsProjection));
     _subjectAssets     = realm.Services.GetSubject <AssetUpdateMessage>(AssetsTopicUri);
     _subjectAssetPairs = realm.Services.GetSubject <AssetPairUpdateMessage>(AssetPairsTopicUri);
     _mapper            = mapper ?? throw new ArgumentNullException(nameof(mapper));
 }
 public SpotOrderbookSubscriber(
     IRabbitMqSubscribeHelper rabbitMqSubscribeHelper,
     string connectionString,
     ILog log, IWampHostedRealm realm)
 {
     _log   = log;
     _realm = realm;
     _rabbitMqSubscribeHelper = rabbitMqSubscribeHelper;
     _connectionString        = connectionString;
 }
 public TradesAnonManager(
     IWampHostedRealm realm,
     IDistributedCache cache,
     CacheSettings settings)
 {
     _realm      = realm;
     _cache      = cache;
     _settings   = settings;
     _redisValue = Encoding.UTF8.GetBytes("data");
 }
Example #19
0
        static void Main(string[] args)
        {
            Console.WriteLine("Infra.CNC.Simulator 1.0");

            const string location = "ws://127.0.0.1:4099/";

            var simulator = new Simulator();


            using (IWampHost host = new WampHost())
            {
                var jsonSerializer = JsonSerializer.Create();

                jsonSerializer.ContractResolver = new CamelCasePropertyNamesContractResolver();

                IWampBinding jsonBinding = new JTokenJsonBinding(jsonSerializer);

                host.RegisterTransport(new FleckWebSocketTransport(location), jsonBinding);

                IWampHostedRealm realm = host.RealmContainer.GetRealmByName("infra.cncService.simulator");

                // Host WAMP application components

                host.Open();

                Console.WriteLine("Server is running on " + location);

                realm.Services.RegisterCallee(new ServerInformationService()).Wait();

                Console.WriteLine("Registered server information service");

                Console.WriteLine("Press any key to send CNC data (x to exit)");



                var choise = Console.ReadKey().KeyChar;

                var subject = realm.Services.GetSubject <ISimulatorValue>("cncData");

                while (choise != 'x' && choise != 'X')
                {
                    simulator.GenerateValues();

                    subject.OnNext(simulator.Root);

                    Console.WriteLine("Data was sent!");

                    choise = Console.ReadKey().KeyChar;
                }

                Console.WriteLine(Environment.NewLine + "Goodbye");

                Console.ReadLine();
            }
        }
 public WalletStatusUpdatePublisher(
     IWampHostedRealm realm,
     IWalletManagementClient walletManagementClient,
     ISessionCache sessionCache,
     ILogFactory logFactory)
 {
     _realm = realm;
     _walletManagementClient = walletManagementClient;
     _sessionCache           = sessionCache;
     _log = logFactory.CreateLog(this);
 }
Example #21
0
 public OrdersPublisher(
     [NotNull] IClientAccountClient clientAccountClient,
     [NotNull] IOrdersConverter ordersConverter,
     [NotNull] ISessionCache sessionCache,
     [NotNull] IWampHostedRealm realm)
 {
     _clientAccountClient = clientAccountClient ?? throw new ArgumentNullException(nameof(clientAccountClient));
     _ordersConverter     = ordersConverter ?? throw new ArgumentNullException(nameof(ordersConverter));
     _sessionCache        = sessionCache ?? throw new ArgumentNullException(nameof(sessionCache));
     _subject             = realm?.Services.GetSubject(Topic) ?? throw new ArgumentNullException(nameof(realm));
 }
Example #22
0
        /// <summary>
        /// Hosts a WAMP session management service for the given realm.
        /// </summary>
        /// <param name="hostedRealm">The given realm.</param>
        /// <param name="uriValidator">The <see cref="IWampUriValidator"/> to use to verify GOODBYE message reason uri (see also <see cref="GoodbyeMessage.Reason"/>).</param>
        /// <returns>A disposable: disposing it will unregister the hosted session management service.</returns>
        public static IDisposable HostSessionManagementService(this IWampHostedRealm hostedRealm, IWampUriValidator uriValidator = null)
        {
            WampSessionManagementService service = new WampSessionManagementService(hostedRealm, uriValidator);

            RegisterOptions registerOptions = new RegisterOptions {
                DiscloseCaller = true
            };

            CompositeDisposable disposable = HostDisposableService(hostedRealm, service, new CalleeRegistrationInterceptor(registerOptions));

            return(disposable);
        }
Example #23
0
        private static WampPlayground SetupHost()
        {
            WampPlayground playground = new WampPlayground();

            playground.Host.Open();

            IWampHostedRealm realm =
                playground.Host.RealmContainer.GetRealmByName("realm1");

            IDisposable disposable = realm.HostSessionManagementService();

            return(playground);
        }
Example #24
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);
        }
        public TradesSubscriber(
            [NotNull] ILog log,
            [NotNull] IRabbitMqSubscribeHelper rabbitMqSubscribeHelper,
            [NotNull] string connectionString,
            [NotNull] IWampHostedRealm realm,
            [NotNull] ISessionCache sessionCache)
        {
            _log                     = log ?? throw new ArgumentNullException(nameof(log));
            _sessionCache            = sessionCache ?? throw new ArgumentNullException(nameof(sessionCache));
            _rabbitMqSubscribeHelper = rabbitMqSubscribeHelper ?? throw new ArgumentNullException(nameof(rabbitMqSubscribeHelper));
            _connectionString        = connectionString ?? throw new ArgumentNullException(nameof(connectionString));

            _subject = realm.Services.GetSubject("trades");
        }
        private static CompositeDisposable HostDisposableService(IWampHostedRealm hostedRealm, IDisposable service, ICalleeRegistrationInterceptor registrationInterceptor)
        {
            Task <IAsyncDisposable> registrationDisposable =
                hostedRealm.Services.RegisterCallee(service, registrationInterceptor);

            IAsyncDisposable asyncDisposable = registrationDisposable.Result;

            IDisposable unregisterDisposable =
                Disposable.Create(() => asyncDisposable.DisposeAsync().Wait());

            CompositeDisposable result =
                new CompositeDisposable(unregisterDisposable, service);

            return(result);
        }
Example #27
0
 public BalancesConsumer(
     [NotNull] ILog log,
     [NotNull] RabbitMqSettings settings,
     [NotNull] IWampHostedRealm realm,
     [NotNull] ISessionCache sessionCache,
     [NotNull] IClientToWalletMapper clientToWalletMapper,
     [NotNull] IRabbitMqSubscribeHelper rabbitMqSubscribeHelper)
 {
     _log                     = log ?? throw new ArgumentNullException(nameof(log));
     _sessionCache            = sessionCache ?? throw new ArgumentNullException(nameof(sessionCache));
     _rabbitMqSubscribeHelper = rabbitMqSubscribeHelper ?? throw new ArgumentNullException(nameof(rabbitMqSubscribeHelper));
     _settings                = settings ?? throw new ArgumentNullException(nameof(settings));
     _clientToWalletMapper    = clientToWalletMapper ?? throw new ArgumentNullException(nameof(clientToWalletMapper));
     _subject                 = realm.Services.GetSubject(TopicUri);
 }
        public WampBindedRealm(IWampHostedRealm realm,
                               IWampRouterBuilder routerBuilder,
                               IWampSessionServer <TMessage> session,
                               IWampBinding <TMessage> binding,
                               IWampEventSerializer eventSerializer)
        {
            mRealm     = realm;
            mRealmGate = realm as IWampRealmGate;

            IWampDealer <TMessage> dealer =
                routerBuilder.CreateDealerHandler(realm, binding);

            IWampBroker <TMessage> broker =
                routerBuilder.CreateBrokerHandler(realm, binding, eventSerializer);

            mServer = routerBuilder.CreateServer(session, dealer, broker);
        }
Example #29
0
        /// <summary>
        /// Hosts a WAMP meta-api service describing the given realm.
        /// </summary>
        /// <param name="hostedRealm">The given realm.</param>
        /// <returns>A disposable: disposing it will unregister the hosted meta-api service.</returns>
        public static IDisposable HostMetaApiService(this IWampHostedRealm hostedRealm)
        {
            WampRealmDescriptorService service = new WampRealmDescriptorService(hostedRealm);

            Task <IAsyncDisposable> registrationDisposable =
                hostedRealm.Services.RegisterCallee(service);

            IAsyncDisposable asyncDisposable = registrationDisposable.Result;

            IDisposable unregisterDisposable =
                Disposable.Create(() => asyncDisposable.DisposeAsync().Wait());

            CompositeDisposable result =
                new CompositeDisposable(unregisterDisposable, service);

            return(result);
        }
Example #30
0
        private void StartWampRouter()
        {
            _host = new WampAuthenticationHost(new UserNameBasedAuthenticationFactory());

            _host.RegisterTransport(new AspNetWebSocketTransport("Composite/api/Router"
                                                                 , new UserNameBasedCookieAuthenticationFactory()),
                                    new JTokenJsonBinding(new JsonSerializer()
            {
                ContractResolver = new CamelCasePropertyNamesContractResolver()
            }));

            IWampHostedRealm realm = _host.RealmContainer.GetRealmByName(DefaultRealmName);

            realm.SessionCreated += SessionCreated;
            realm.SessionClosed  += SessionRemoved;
            _host.Open();
        }