Esempio n. 1
0
        /// <summary>
        /// sub channel and set callback function
        /// </summary>
        /// <param name="subStr"></param>
        /// <param name="ch"></param>
        /// <param name="fun"></param>
        /// <param name="param"></param>
        /// <returns></returns>
        protected bool Sub(string subStr, string ch, Delegate fun, Type paramType)
        {
            if (_WebSocket == null)
            {
                _logger.Log(Log.LogLevel.Error, $"please connect first.");
                return(false);
            }
            while (!_canWork)
            {
                System.Threading.Thread.Sleep(10);
            }

            ch = ch.ToLower();
            if (_onSubCallbackFuns.ContainsKey(ch))
            {
                _onSubCallbackFuns[ch] = new MethonInfo()
                {
                    fun = fun, paramType = paramType
                };
                return(true);
            }
            _WebSocket.Send(subStr);
            _all_sub_strs.Add(subStr);
            _logger.Log(Log.LogLevel.Info, $"websocket has send data: {subStr}");
            _onSubCallbackFuns[ch] = new MethonInfo()
            {
                fun = fun, paramType = paramType
            };;

            return(true);
        }
Esempio n. 2
0
        /// <summary>
        /// handle req callback fun
        /// </summary>
        /// <param name="ch"></param>
        /// <param name="data"></param>
        /// <param name="jdata"></param>
        private void _HandleReqCallbackFun(string ch, string data, JObject jdata)
        {
            ch = ch.ToLower();

            if (!_onReqCallbackFuns.ContainsKey(ch))
            {
                _logger.Log(Log.LogLevel.Info, $"no callback function to handle: {data}");
                return;
            }
            MethonInfo mi = _onReqCallbackFuns[ch];

            if (mi == null)
            {
                _logger.Log(Log.LogLevel.Info, $"no callback function to handle: {data}");
                return;
            }
            mi.fun.DynamicInvoke(JsonConvert.DeserializeObject(data, mi.paramType));
        }
Esempio n. 3
0
        /// <summary>
        /// request channel data
        /// </summary>
        /// <param name="reqStr"></param>
        /// <param name="ch"></param>
        /// <param name="fun"></param>
        /// <param name="paramType"></param>
        /// <returns></returns>
        protected bool Req(string reqStr, string ch, Delegate fun, Type paramType)
        {
            if (_WebSocket == null)
            {
                _logger.Log(Log.LogLevel.Error, $"please connect first.");
                return(false);
            }
            while (!_canWork)
            {
                System.Threading.Thread.Sleep(10);
            }

            ch = ch.ToLower();

            _WebSocket.Send(reqStr);
            _logger.Log(Log.LogLevel.Info, $"websocket has send data: {reqStr}.");
            _onReqCallbackFuns[ch] = new MethonInfo()
            {
                fun = fun, paramType = paramType
            };

            return(true);
        }
Esempio n. 4
0
        /// <summary>
        /// handle sub callback fun
        /// </summary>
        /// <param name="ch"></param>
        /// <param name="data"></param>
        /// <param name="jdata"></param>
        private void _HandleSubCallbackFun(string ch, string data, JObject jdata)
        {
            ch = ch.ToLower();

            MethonInfo mi = null;

            if (_onSubCallbackFuns.ContainsKey(ch))
            {
                mi = _onSubCallbackFuns[ch];
            }
            else if (ch.StartsWith("orders.") && _onSubCallbackFuns.ContainsKey("orders.*"))
            {
                mi = _onSubCallbackFuns["orders.*"];
            }
            else if (ch.StartsWith("matchorders.") && _onSubCallbackFuns.ContainsKey("matchorders.*"))
            {
                mi = _onSubCallbackFuns["matchorders.*"];
            }
            else if (ch.StartsWith("trigger_order.") && _onSubCallbackFuns.ContainsKey("trigger_order.*"))
            {
                mi = _onSubCallbackFuns["trigger_order.*"];
            }
            else if (ch.EndsWith(".liquidation_orders") && _onSubCallbackFuns.ContainsKey("public.*.liquidation_orders"))
            {
                mi = _onSubCallbackFuns["public.*.liquidation_orders"];
            }
            else if (ch == "accounts" || ch == "positions" || ch == "positions_cross")
            {
                string contract_code = jdata["data"][0]["contract_code"].ToObject <string>();
                string full_ch       = $"{ch}.{contract_code}";
                full_ch = full_ch.ToLower();

                if (_onSubCallbackFuns.ContainsKey(full_ch))
                {
                    mi = _onSubCallbackFuns[full_ch];
                }
                else if (_onSubCallbackFuns.ContainsKey($"{ch}.*"))
                {
                    mi = _onSubCallbackFuns[$"{ch}.*"];
                }
            }
            else if (ch == "accounts_cross")
            {
                string margin_account = jdata["data"][0]["margin_account"].ToObject <string>();
                string full_ch        = $"{ch}.{margin_account}";
                full_ch = full_ch.ToLower();

                if (_onSubCallbackFuns.ContainsKey(full_ch))
                {
                    mi = _onSubCallbackFuns[full_ch];
                }
                else if (_onSubCallbackFuns.ContainsKey($"{ch}.*"))
                {
                    mi = _onSubCallbackFuns[$"{ch}.*"];
                }
            }

            if (mi == null)
            {
                _logger.Log(Log.LogLevel.Info, $"no callback function to handle: {data}");
                return;
            }
            mi.fun.DynamicInvoke(JsonConvert.DeserializeObject(data, mi.paramType));
        }