Esempio n. 1
0
        static void Echo(Instance instance, bool writeLog)
        {
            if (instance.MessageConnection.ConnectState != ConnectionState.Connected)
            {
                return;
            }

            // 验证一次请求
            // string text = Guid.NewGuid().ToString();
            string text = "!verify";

            if (writeLog)
            {
                instance.WriteErrorLog("Begin echo: " + text);
            }

            try
            {
                string result = instance.MessageConnection.EchoTaskAsync(text, TimeSpan.FromSeconds(5), instance._cancel.Token).Result;

                // 此用法在 dp2mserver 不存在 echo() API 的时候会挂起当前线程
                // string result = instance.MessageConnection.echo(text).Result;

                if (result == null)
                {
                    result = "(timeout)";
                }

                if (writeLog)
                {
                    instance.WriteErrorLog("End   echo: " + result);
                }
            }
            catch (Exception ex)
            {
                instance.WriteErrorLog("echo 出现异常: " + ExceptionUtil.GetExceptionText(ex));
                {
                    string strErrorCode = "";
                    if (MessageConnection.IsHttpClientException(ex, out strErrorCode))
                    {
                        // echo 的时候有小概率可能会返回用户认证异常?重置连接
                        Task.Run(() => instance.TryResetConnection());
                    }
                }
            }
        }