internal static void Handle(JToken token, SubscribedResponse subscription,
            Subject<LiquidationFeedStatus> subject)
        {
            var data = token[1];

            if (data.Type != JTokenType.Array)
            {
                // probably heartbeat, ignore
                return;
            }

            // TODO: check if liquidation updates are always arrays
            if (data.First.Type == JTokenType.Array)
            {
                // initial snapshot
                var liquidations = data.ToObject<LiquidationFeedStatus[]>();
                foreach (var liquidation in liquidations)
                {
                    liquidation.ChanId = subscription.ChanId;
                    subject.OnNext(liquidation);
                }

                return;
            }

            var derivativePairStatus = data.ToObject<LiquidationFeedStatus>();
            derivativePairStatus.ChanId = subscription.ChanId;

            subject.OnNext(derivativePairStatus);
        }
        internal static void Handle(JToken token, SubscribedResponse subscription, ConfigurationState config,
                                    Subject <Book> subject, Subject <Book[]> subjectSnapshot, Subject <ChecksumResponse> subjectChecksum)
        {
            var data = token[1];

            if (config.IsChecksumEnabled)
            {
                if (data?.Type == JTokenType.String && data.Value <string>() == "cs")
                {
                    ChecksumResponse.Handle(token, subscription, config, subjectChecksum);
                    return;
                }
            }

            if (data?.Type != JTokenType.Array)
            {
                return; // heartbeat, ignore
            }

            if (data.First?.Type == JTokenType.Array)
            {
                // initial snapshot
                Handle(token, data.ToObject <Book[]>(), subscription, config, subject, subjectSnapshot);
                return;
            }

            var book = data.ToObject <Book>();

            book.Pair   = subscription.Pair;
            book.Symbol = subscription.Symbol;
            book.ChanId = subscription.ChanId;
            SetGlobalData(book, config, token);
            subject.OnNext(book);
        }
Exemple #3
0
        private void OnSubscription(SubscribedResponse response)
        {
            var channelId = response.ChanId;

            switch (response.Channel)
            {
            case "ticker":
                _channelIdToHandler[channelId] = data => OnTicker(data, response);
                break;

            case "trades":
                //if pair is null means that is funding
                if (response.Pair == null)
                {
                    _channelIdToHandler[channelId] = data => OnFundings(data, response);
                }
                else
                {
                    _channelIdToHandler[channelId] = data => OnTrades(data, response);
                }
                break;

            case "candles":
                _channelIdToHandler[channelId] = data => OnCandles(data, response);
                break;

            case "book":
                _channelIdToHandler[channelId] = data => OnBook(data, response);
                break;
            }
        }
Exemple #4
0
        private void OnSubscription(SubscribedResponse response)
        {
            _streams.SubscriptionSubject.OnNext(response);

            var channelId = response.ChanId;

            // ********************
            // ADD HANDLERS BELOW
            // ********************

            switch (response.Channel)
            {
            case "ticker":
                _channelIdToHandler[channelId] = (data, config) =>
                                                 Ticker.Handle(data, response, config, _streams.TickerSubject);
                break;

            case "trades":
                //if pair is null means that is funding
                if (response.Pair == null)
                {
                    _channelIdToHandler[channelId] = (data, config) =>
                                                     Funding.Handle(data, response, config, _streams.FundingsSubject);
                }
                else
                {
                    _channelIdToHandler[channelId] = (data, config) =>
                                                     Trade.Handle(data, response, config, _streams.TradesSubject, _streams.TradesSnapshotSubject);
                }
                break;

            case "candles":
                _channelIdToHandler[channelId] = (data, config) =>
                                                 Candles.Handle(data, response, _streams.CandlesSubject);
                break;

            case "book":
                _channelIdToHandler[channelId] = (data, config) =>
                                                 Book.Handle(data, response, config, _streams.BookSubject, _streams.BookSnapshotSubject, _streams.BookChecksumSubject);
                break;

            case "status":
                if (response.Key.StartsWith("deriv"))
                {
                    _channelIdToHandler[channelId] = (data, config) =>
                                                     DerivativePairStatus.Handle(data, response, _streams.DerivativePairSubject);
                }

                if (response.Key.StartsWith("liq"))
                {
                    _channelIdToHandler[channelId] = (data, config) =>
                                                     LiquidationFeedStatus.Handle(data, response, _streams.LiquidationFeedSubject);
                }

                break;
                //default:
                //    Log.Warning($"Missing subscription handler '{response.Channel}'");
                //    break;
            }
        }
        public static bool Equals(ArticleInfoResponse?left, ArticleInfoResponse?right)
        {
            bool result = SubscribedResponse.Equals(left, right);

            result &= (result ? (left?.Articles.SequenceEqual(right?.Articles)).GetValueOrDefault() : false);

            return(result);
        }
        public static bool Equals(ShoppingCartResponse?left, ShoppingCartResponse?right)
        {
            bool result = SubscribedResponse.Equals(left, right);

            result &= (result ? ShoppingCartContent.Equals(left?.ShoppingCart, right?.ShoppingCart) : false);

            return(result);
        }
        public static bool Equals(ArticleMasterSetResponse?left, ArticleMasterSetResponse?right)
        {
            bool result = SubscribedResponse.Equals(left, right);

            result &= (result ? ArticleMasterSetResult.Equals(left?.Result, right?.Result) : false);

            return(result);
        }
Exemple #8
0
        public static bool Equals(StockDeliverySetResponse?left, StockDeliverySetResponse?right)
        {
            bool result = SubscribedResponse.Equals(left, right);

            result &= (result ? StockDeliverySetResult.Equals(left?.Result, right?.Result) : false);

            return(result);
        }
        public static bool Equals(TaskCancelOutputResponse?left, TaskCancelOutputResponse?right)
        {
            bool result = SubscribedResponse.Equals(left, right);

            result &= (result ? (left?.Tasks.SequenceEqual(right?.Tasks)).GetValueOrDefault() : false);

            return(result);
        }
        public static bool Equals(OutputInfoResponse?left, OutputInfoResponse?right)
        {
            bool result = SubscribedResponse.Equals(left, right);

            result &= (result ? OutputInfoResponseTask.Equals(left?.Task, right?.Task) : false);

            return(result);
        }
Exemple #11
0
        public static bool Equals(StatusResponse?left, StatusResponse?right)
        {
            bool result = SubscribedResponse.Equals(left, right);

            result &= (result ? (left?.Components.SequenceEqual(right?.Components)).GetValueOrDefault() : false);

            return(result);
        }
        public static bool Equals(StockDeliveryInfoResponse?left, StockDeliveryInfoResponse?right)
        {
            bool result = SubscribedResponse.Equals(left, right);

            result &= (result ? StockDeliveryInfoResponseTask.Equals(left?.Task, right?.Task) : false);

            return(result);
        }
        public static bool Equals(StockLocationInfoResponse?left, StockLocationInfoResponse?right)
        {
            bool result = SubscribedResponse.Equals(left, right);

            result &= (result ? (left?.StockLocations.SequenceEqual(right?.StockLocations)).GetValueOrDefault() : false);

            return(result);
        }
        public static bool Equals(ConfigurationGetResponse?left, ConfigurationGetResponse?right)
        {
            bool result = SubscribedResponse.Equals(left, right);

            result &= (result ? Configuration.Equals(left?.Configuration, right?.Configuration) : false);

            return(result);
        }
Exemple #15
0
        public static bool Equals(ArticlePriceResponse?left, ArticlePriceResponse?right)
        {
            bool result = SubscribedResponse.Equals(left, right);

            result &= (result ? (left?.Articles.SequenceEqual(right?.Articles)).GetValueOrDefault() : false);
            result &= (result ? Iso4217Code.Equals(left?.Currency, right?.Currency) : false);

            return(result);
        }
Exemple #16
0
 public void OnChannelCreated(SubscribedResponse subscribedResponse)
 {
     if (subscribedResponse.Event == "subscribed")
     {
         var aggregatorType = (subscribedResponse.Precision == "R0") ? AggregatorType.RawBooks : AggregatorType.Books;
         var channeldId     = subscribedResponse.ChannelId;
         _aggregators.Add(channeldId, CreateAggregator(aggregatorType, channeldId, subscribedResponse.Pair));
     }
 }
Exemple #17
0
        public static bool Equals(InputResponse?left, InputResponse?right)
        {
            bool result = SubscribedResponse.Equals(left, right);

            result &= (result ? EqualityComparer <bool?> .Default.Equals(left?.IsNewDelivery, right?.IsNewDelivery) : false);
            result &= (result ? (left?.Articles.SequenceEqual(right?.Articles)).GetValueOrDefault() : false);

            return(result);
        }
 private void OnBooks(Book[] books, SubscribedResponse subscription)
 {
     //var reversed = books.Reverse().ToArray(); // newest last
     foreach (var book in books)
     {
         book.Pair   = subscription.Pair;
         book.ChanId = subscription.ChanId;
         Streams.Raise(book);
     }
 }
Exemple #19
0
        public static bool Equals(OutputResponse?left, OutputResponse?right)
        {
            bool result = SubscribedResponse.Equals(left, right);

            result &= (result ? OutputRequestDetails.Equals(left?.Details, right?.Details) : false);
            result &= (result ? String.Equals(left?.BoxNumber, right?.BoxNumber, StringComparison.OrdinalIgnoreCase) : false);
            result &= (result ? (left?.Criterias.SequenceEqual(right?.Criterias)).GetValueOrDefault() : false);

            return(result);
        }
        private async Task HandleResponse(SubscribedResponse response)
        {
            await Log.WriteInfoAsync(nameof(HandleResponse), "Subscribing on the order book", $"Event: {response.Event} Channel: {response.Channel} Pair: {response.Pair}");

            if (!_channels.TryGetValue(response.ChanId, out var channel))
            {
                channel = new Channel(response.ChanId, response.Pair);
                _channels[channel.Id] = channel;
            }
        }
        private void OnSubscription(SubscribedResponse response)
        {
            var channelId = response.ChanId;

            switch (response.Channel)
            {
            case "ticker":
                _channelIdToHandler[channelId] = data => OnTicker(data, response);
                break;
            }
        }
        private void OnTrades(Trade[] trades, SubscribedResponse subscription)
        {
            var reversed = trades.Reverse().ToArray(); // newest last

            foreach (var trade in reversed)
            {
                trade.Type   = TradeType.Executed;
                trade.Pair   = subscription.Pair;
                trade.ChanId = subscription.ChanId;
                Streams.Raise(trade);
            }
        }
Exemple #23
0
        private void OnFundings(Funding[] fundings, SubscribedResponse subscription)
        {
            var reversed = fundings.Reverse().ToArray(); // newest last

            foreach (var funding in reversed)
            {
                funding.Type   = FundingType.Executed;
                funding.Symbol = subscription.Symbol;
                funding.ChanId = subscription.ChanId;
                Streams.Raise(funding);
            }
        }
Exemple #24
0
        internal static void Handle(JToken token, Trade[] trades, SubscribedResponse subscription, ConfigurationState config, Subject <Trade[]> subject)
        {
            var reversed = trades.Reverse().ToArray(); // newest last

            foreach (var trade in reversed)
            {
                trade.Type   = TradeType.Executed;
                trade.Pair   = subscription.Pair;
                trade.ChanId = subscription.ChanId;
                SetGlobalData(trade, config, token);
            }
            subject.OnNext(reversed);
        }
        internal static void Handle(JToken token, Funding[] fundings, SubscribedResponse subscription,
                                    ConfigurationState config, Subject <Funding> subject)
        {
            var reversed = fundings.Reverse().ToArray(); // newest last

            foreach (var funding in reversed)
            {
                funding.Type   = FundingType.Executed;
                funding.Symbol = subscription.Symbol;
                funding.ChanId = subscription.ChanId;
                SetGlobalData(funding, config, token);
                subject.OnNext(funding);
            }
        }
Exemple #26
0
        private void OnBooks(Book[] books, SubscribedResponse subscription)
        {
            foreach (var book in books)
            {
                book.Pair   = subscription.Pair;
                book.ChanId = subscription.ChanId;

                // raise as normal book stream
                Streams.Raise(book);
            }

            // raise as snapshot book stream
            Streams.Raise(books);
        }
        private void OnTicker(JToken token, SubscribedResponse subscription)
        {
            var data = token[1];

            if (data.Type != JTokenType.Array)
            {
                // probably heartbeat, ignore
                return;
            }

            var ticker = data.ToObject <Ticker>();

            ticker.Pair = subscription.Pair;
            Streams.Raise(ticker);
        }
        internal static void Handle(JToken token, Book[] books, SubscribedResponse subscription, ConfigurationState config,
                                    Subject <Book> subject, Subject <Book[]> subjectSnapshot)
        {
            foreach (var book in books)
            {
                book.Pair   = subscription.Pair;
                book.ChanId = subscription.ChanId;
                SetGlobalData(book, config, token);

                // raise as normal book stream
                subject.OnNext(book);
            }

            // raise as snapshot book stream
            subjectSnapshot.OnNext(books);
        }
        internal static void Handle(JToken token, SubscribedResponse subscription, Subject <Candles> subject)
        {
            var data = token[1];

            if (data.Type != JTokenType.Array)
            {
                // probably heartbeat, ignore
                return;
            }

            var candles = data.ToObject <Candles>();

            candles.TimeFrame = new BitfinexTimeFrame().GetFieldByStringValue(subscription.Key.Split(':')[1]);
            candles.Pair      = subscription.Key.Split(':')[2].Remove(0, 1);
            candles.ChanId    = subscription.ChanId;
            subject.OnNext(candles);
        }
        private void OnCandles(JToken token, SubscribedResponse subscription)
        {
            var data = token[1];

            if (data.Type != JTokenType.Array)
            {
                // probably heartbeat, ignore
                return;
            }

            var candles = data.ToObject <Candles>();

            candles.TimeFrame = new BitfinexTimeFrame().GetFieldByStringValue(subscription.Key.Split(':')[1]);
            candles.Pair      = subscription.Key.Split(':')[2].Remove(0, 1);
            candles.ChanId    = subscription.ChanId;
            Streams.Raise(candles);
        }
Exemple #31
0
        private void HandlePresenceRequest(Packet packet)
        {
            PresencePacket IncomingPresencePacket = packet as PresencePacket;

            if (IncomingPresencePacket is ProbeRequest)
            {
                //A Probe means we should send our presence to the probing entity
                //Maybe we should get some user input here.  Not really sure if theyd want to know, though.
                SendCurrentPresence(IncomingPresencePacket.From);
            }
            else if (IncomingPresencePacket is SubscribeRequest)
            {
                string displayString =
                    String.Format("Allow User '{0}; to subscribe to your presence?",
                                  IncomingPresencePacket.From.JabberIDNoResource);
                if (
                    MessageBox.Show(displayString, "Subscription Request", MessageBoxButtons.YesNo,
                                    MessageBoxIcon.Question) == DialogResult.Yes)
                {
                    SubscribedResponse resp = new SubscribedResponse(IncomingPresencePacket.From);
                    SessionManager.Send(resp);

                    SubscribeRequest subscribe =
                        new SubscribeRequest(new JabberID(IncomingPresencePacket.From.JabberIDNoResource));
                    SessionManager.Send(subscribe);
                }
                else
                {
                    UnsubscribedResponse resp = new UnsubscribedResponse();
                    resp.To = IncomingPresencePacket.From;
                    SessionManager.Send(resp);
                }
            }
            else if (IncomingPresencePacket is SubscribedResponse)
            {
                //Let the user know when someone accepts our subscription request
                string displayString =
                    String.Format("User '{0}' has accepted your presence subscription request.",
                                  IncomingPresencePacket.From.JabberIDNoResource);
                MessageBox.Show(displayString, "Subscription Accept", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            else if (IncomingPresencePacket is UnsubscribedResponse)
            {
                //Let the user know when someone revoked our presence subscription
                string displayString =
                    String.Format("User '{0}' rejected your reqeust.", IncomingPresencePacket.From.JabberIDNoResource);
                MessageBox.Show(displayString, "Subscription Denied", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            else if (IncomingPresencePacket is AvailableRequest)
            {
                AvailableRequest availableReq = WConvert.ToAvailableRequest(IncomingPresencePacket);
                LoginState state = LoginState.Offline;

                if (availableReq.From.Server.Contains(".com"))
                {
                    state = (LoginState) availableReq.Show;
                }
                else
                {
                    state = (LoginState) Enum.Parse(typeof (LoginState), availableReq.Status);
                }

                string userName = availableReq.From.UserName;

                Contact contact = Instance.Contacts[userName];
                if (contact != null)
                {
                    contact.UserStatus = state;
                    if (availableReq.HasVCardAvatarUpdateHash)
                    {
                        if (availableReq.HasJabberXAvatarHash)
                        {
                            contact.AvatatType = Contact.AvatarType.JabberXAvatar;
                        }
                        /*else - we prefere VCardAvatar*/
                        if (availableReq.HasVCardAvatarUpdateHash)
                        {
                            contact.AvatatType = Contact.AvatarType.VCardAvatar;
                        }
                        contact.AvatarHash = availableReq.VCardAvatarUpdateHash;
                    }
                }
            }
            else if (IncomingPresencePacket is UnavailableRequest)
            {
                UnavailableRequest avail = WConvert.ToUnavailableRequest(IncomingPresencePacket);
                string userName = avail.From.UserName;
                Contact contact = Instance.Contacts[userName];
                contact.UserStatus = LoginState.Offline;
            }
        }
Exemple #32
0
        private void IncomingAsycPresenceThreadSafe(Packet p)
        {
            PresencePacket IncomingPresencePacket = p as PresencePacket;
            if (IncomingPresencePacket is Coversant.SoapBox.Core.Presence.ProbeRequest)
            {

                //A Probe means we should send ouur presence to the probing entity
                //Maybe we should get some user input here.  Not really sure if theyd want to know, though.
                _SessionManager.SendCurrentPresence(IncomingPresencePacket.From);
            }
            else if (IncomingPresencePacket is Coversant.SoapBox.Core.Presence.SubscribeRequest)
            {
                string displayString = String.Format("Allow User '{0}; to subscribe to your presence?", IncomingPresencePacket.From.JabberIDNoResource);
                if (MessageBox.Show(displayString, "Subscription Request", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
                {
                    SubscribedResponse resp = new SubscribedResponse(IncomingPresencePacket.From);
                    _SessionManager.Send(resp);

                    SubscribeRequest subscribe = new SubscribeRequest(new JabberID(IncomingPresencePacket.From.JabberIDNoResource));
                    _SessionManager.Send(subscribe);
                }
                else
                {
                    UnsubscribedResponse resp = new UnsubscribedResponse();
                    resp.To = IncomingPresencePacket.From;
                    _SessionManager.Send(resp);
                }
            }
            else if (IncomingPresencePacket is Coversant.SoapBox.Core.Presence.SubscribedResponse)
            {
                //Let the user know when someone accepts our subscription request
                string displayString = String.Format("User '{0}' has accepted your presence subscription request.", IncomingPresencePacket.From.JabberIDNoResource);
                MessageBox.Show(displayString, "Subscription Accept", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            else if (IncomingPresencePacket is Coversant.SoapBox.Core.Presence.UnsubscribedResponse)
            {
                //Let the user know when someone revoked our presence subscription

                string displayString = String.Format("User '{0}' rejected your reqeust.", IncomingPresencePacket.From.JabberIDNoResource);
                MessageBox.Show(displayString, "Subscription Denied", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            else if (IncomingPresencePacket is Coversant.SoapBox.Core.Presence.ErrorResponse)
            {
                //Let the user know of any presence errors that are received
                //Dim PresenceError As SoapBox.Core.Presence.ErrorResponse = CType(IncomingPresencePacket, SoapBox.Core.Presence.ErrorResponse)
                //MsgBox("The following presence error was received:" & vbCrLf & vbCrLf & "Code: " & PresenceError.ErrorCode & vbCrLf & "Text: " & PresenceError.ErrorText, MsgBoxStyle.Exclamation, "Presence Error")
            }
            else if (IncomingPresencePacket is Coversant.SoapBox.Core.Presence.AvailableRequest)
            {
                AvailableRequest avail = WConvert.ToAvailableRequest(IncomingPresencePacket);
                ListViewRosterItem lvri = this.GetListViewRosterItem(avail.From);
                if (lvri != null)
                    lvri.Presence = avail;
            }
            else if (IncomingPresencePacket is Coversant.SoapBox.Core.Presence.UnavailableRequest)
            {
                UnavailableRequest avail = WConvert.ToUnavailableRequest(IncomingPresencePacket);
                ListViewRosterItem lvri = this.GetListViewRosterItem(avail.From);
                if (lvri != null)
                    lvri.Presence = avail;
            }
        }