Example #1
0
        private void OnProcess(dynamic obj)
        {
            var channel = (string)obj.channel;
            var evt     = (string)obj.@event;
            var data    = obj.data;

            //if (data != null && evt != "bts:error")
            //	data = ((string)data).DeserializeObject<object>();

            switch (evt)
            {
            //case "pusher:connection_established":
            //	_activityTimeout = (int)data.activity_timeout;
            //	_nextPing = DateTime.UtcNow.AddSeconds(_activityTimeout);
            //	Connected?.Invoke();
            //	break;

            case "bts:error":
                Error?.Invoke(new InvalidOperationException((string)data.message));
                break;

            case "ping":
                SendPingPong("pong");
                break;

            case "pong":
                break;

            case "bts:subscription_succeeded":
            {
                if (channel.StartsWith(ChannelNames.OrderBook))
                {
                    OrderBookSubscribed?.Invoke(GetPair(channel, ChannelNames.OrderBook));
                }
                else if (channel.StartsWith(ChannelNames.Trades))
                {
                    TradesSubscribed?.Invoke(GetPair(channel, ChannelNames.Trades));
                }
                else if (channel.StartsWith(ChannelNames.OrderLog))
                {
                    OrderLogSubscribed?.Invoke(GetPair(channel, ChannelNames.OrderLog));
                }
                else
                {
                    this.AddErrorLog(LocalizedStrings.Str3311Params, channel);
                }

                break;
            }

            case "bts:unsubscription_succeeded":
            {
                if (channel.StartsWith(ChannelNames.OrderBook))
                {
                    OrderBookUnSubscribed?.Invoke(GetPair(channel, ChannelNames.OrderBook));
                }
                else if (channel.StartsWith(ChannelNames.Trades))
                {
                    TradesUnSubscribed?.Invoke(GetPair(channel, ChannelNames.Trades));
                }
                else if (channel.StartsWith(ChannelNames.OrderLog))
                {
                    OrderLogUnSubscribed?.Invoke(GetPair(channel, ChannelNames.OrderLog));
                }
                else
                {
                    this.AddErrorLog(LocalizedStrings.Str3311Params, channel);
                }

                break;
            }

            case "trade":
                NewTrade?.Invoke(GetPair(channel, ChannelNames.Trades), ((JToken)data).DeserializeObject <Trade>());
                break;

            case "data":
                NewOrderBook?.Invoke(GetPair(channel, ChannelNames.OrderBook), ((JToken)data).DeserializeObject <OrderBook>());
                break;

            case "order_created":
            case "order_changed":
            case "order_deleted":
                NewOrderLog?.Invoke(GetPair(channel, ChannelNames.OrderLog), evt == "order_deleted" ? OrderStates.Done : OrderStates.Active, ((JToken)data).DeserializeObject <Order>());
                break;

            default:
                this.AddErrorLog(LocalizedStrings.Str3312Params, evt);
                break;
            }
        }