示例#1
0
        private void ConnectAndAuthenticateAndResubscribe()
        {
            try
            {
                //Connect and auth
                ConnectAndAuthenticate();

                //Resub markets
                MarketSubscriptionMessage marketSubscription = _processor.MarketResubscribeMessage;
                if (marketSubscription != null)
                {
                    Trace.TraceInformation("Resubscribe to market subscription.");
                    MarketSubscription(marketSubscription);
                }

                //Resub orders
                OrderSubscriptionMessage orderSubscription = _processor.OrderResubscribeMessage;
                if (orderSubscription != null)
                {
                    Trace.TraceInformation("Resubscribe to order subscription.");
                    OrderSubscription(orderSubscription);
                }

                //Reset counter
                ReconnectCounter = 0;
            } catch (Exception e)
            {
                Trace.TraceError("Reconnect failed", e);
                ReconnectCounter++;
            }
        }
        public IObservable <MarketSnap> SubscribeMarket(string marketId, MarketSubscriptionMessage message)
        {
            networkClient.Start();

            if (marketsObservables.TryGetValue(marketId, out IObservable <MarketSnap> market))
            {
                networkClient.MarketSubscription(message);
                return(market);
            }

            var observable = Observable.Create <MarketSnap>(
                (IObserver <MarketSnap> observer) =>
            {
                marketObservers.AddOrUpdate(marketId, observer, (key, existingVal) => existingVal);
                return(Disposable.Create(() =>
                {
                    marketsObservables.TryRemove(marketId, out IObservable <MarketSnap> o);
                    marketObservers.TryRemove(marketId, out IObserver <MarketSnap> ob);
                }));
            })
                             .Publish()
                             .RefCount();

            marketsObservables.AddOrUpdate(marketId, observable, (key, existingVal) => existingVal);

            // TODO:// race?
            networkClient.MarketSubscription(message);
            return(observable);
        }
示例#3
0
 /// <summary>
 /// Subscribe the the specified orders (syncronously) with the configured
 /// HeartbeatMS, ConflationMS and MarketDataFilter.
 /// </summary>
 /// <param name="message"></param>
 public void MarketSubscription(MarketSubscriptionMessage message)
 {
     message.ConflateMs  = ConflateMs;
     message.HeartbeatMs = HeartbeatMs;
     if (MarketDataFilter != null)
     {
         message.MarketDataFilter = MarketDataFilter;
     }
     WaitFor(_processor.MarketSubscription(message));
 }
        public Task <StatusMessage> MarketSubscription(MarketSubscriptionMessage message)
        {
            int id = NextId();

            message.Id = id;
            message.Op = REQUEST_MARKET_SUBSCRIPTION;
            var newSub = new SubscriptionHandler <MarketSubscriptionMessage, ChangeMessage <MarketChange>, MarketChange>(id, message, false);

            return(SendMessage(new RequestResponse(id, message,
                                                   success => MarketSubscriptionHandler = newSub)));
        }
        public IObservable <MarketSnap> SubscribeMarket(string marketId)
        {
            MarketFilter filter = new MarketFilter {
                MarketIds = new List <string>()
                {
                    marketId
                }
            };
            MarketSubscriptionMessage message = new MarketSubscriptionMessage()
            {
                MarketFilter = filter
            };

            return(SubscribeMarket(marketId, message));
        }
示例#6
0
        /// <summary>
        /// Subscribe the the specified orders (syncronously) with the configured
        /// HeartbeatMS, ConflationMS and MarketDataFilter.
        /// </summary>
        /// <param name="message"></param>
        public void MarketSubscription(MarketSubscriptionMessage message)
        {
            foreach (var market in message.MarketFilter.MarketIds)
            {
                Log.Info($"MarketSubscription for {market}");
            }

            message.ConflateMs  = ConflateMs;
            message.HeartbeatMs = HeartbeatMs;
            if (MarketDataFilter != null)
            {
                message.MarketDataFilter = MarketDataFilter;
            }
            WaitFor(_processor.MarketSubscription(message));
        }
示例#7
0
 /// <summary>
 /// Explicit order subscripion. (starting the client if needed).
 /// </summary>
 /// <param name="subscription"></param>
 public void SubscribeMarkets(MarketSubscriptionMessage subscription)
 {
     _client.Start();
     _client.MarketSubscription(subscription);
 }
        public IObservable<MarketSnap> SubscribeMarket(string marketId, MarketSubscriptionMessage message)
        {
            networkClient.Start();

            IObservable<MarketSnap> market;
            if (marketsObservables.TryGetValue(marketId, out market))
            {
                networkClient.MarketSubscription(message);
                return market;
            }

            var observable = Observable.Create<MarketSnap>(
               (IObserver<MarketSnap> observer) =>
               {
                   marketObservers.AddOrUpdate(marketId, observer, (key, existingVal) => existingVal);
                   return Disposable.Create(() =>
                   {
                       IObserver<MarketSnap> ob;
                       IObservable<MarketSnap> o;
                       marketsObservables.TryRemove(marketId, out o);
                       marketObservers.TryRemove(marketId, out ob);
                   });
               })
               .Publish()
               .RefCount();

            marketsObservables.AddOrUpdate(marketId, observable, (key, existingVal) => existingVal);

            // TODO:// race?
            networkClient.MarketSubscription(message);
            return observable;
        }
 public IObservable<MarketSnap> SubscribeMarket(string marketId)
 {
     MarketFilter filter = new MarketFilter { MarketIds = new List<string>() { marketId } };
     MarketSubscriptionMessage message = new MarketSubscriptionMessage() { MarketFilter = filter };
     return SubscribeMarket(marketId, message);
 }