/// <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); }
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); }
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; }
public static IDisposable EnableDistributedBackplane(IWampHostedRealm realm) { IPublishSubscribe publishSubscribe = new PublishSubscribeBuilder(new WireSerializer()).Build(); Proto.ClusterBuilder.RunSeededLocalCluster(); return(realm.EnableDistributedBackplane(publishSubscribe)); }
public ConfirmationCommandHandler( IWampHostedRealm realm, ISessionCache sessionCache) { _subject = realm?.Services.GetSubject(Topic); _sessionCache = sessionCache; }
public WampSessionManagementService(IWampHostedRealm realm, IWampUriValidator uriValidator = null) { mRealm = realm; mUriValidator = uriValidator ?? new LooseUriValidator(); mRealm.SessionCreated += OnSessionCreated; mRealm.SessionClosed += OnSessionClosed; }
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)); }
public OperationsProjection( IWampHostedRealm realm, ISessionCache sessionCache) { _subject = realm?.Services.GetSubject(Topic); _sessionCache = sessionCache; }
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); }
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"); } } }); } }); }
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; }
public HistoryExportProjection( ILog log, IWampHostedRealm realm, ISessionCache sessionCache) { _log = log; _subject = realm?.Services.GetSubject(Topic); _sessionCache = sessionCache; }
public MarketDataProjection( [NotNull] IWampHostedRealm realm, TimeSpan cacheInterval, IMemoryCache memoryCache) { _realm = realm; _cacheInterval = cacheInterval; _memoryCache = memoryCache; _subject = _realm.Services.GetSubject <MarketDataChangedEvent>(MarketDataTopic); }
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"); }
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); }
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)); }
/// <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); }
private static WampPlayground SetupHost() { WampPlayground playground = new WampPlayground(); playground.Host.Open(); IWampHostedRealm realm = playground.Host.RealmContainer.GetRealmByName("realm1"); IDisposable disposable = realm.HostSessionManagementService(); return(playground); }
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); }
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); }
/// <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); }
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(); }