errorhelper.cs

来自「破解的飞信源代码」· CS 代码 · 共 107 行

CS
107
字号
namespace Imps.Client.Core
{
    using Imps.Client.Base;
    using System;

    internal static class ErrorHelper
    {
        public static void HandleException(Exception ex)
        {
            HandleException(ex, null, null, null);
        }

        public static void HandleException(Exception ex, User user, AsyncBizOperation op, ImpsErrorEventArgs eaError)
        {
            LogHelper.LogException(ex);
            if (eaError != null)
            {
                if (op != null)
                {
                    op.FireImpsErrorInUiThread(eaError);
                }
                else if (user != null)
                {
                    user.FireImpsErrorInUiThread(eaError);
                }
            }
        }

        public static void HandleReceivedErrorResponse(SipResponse resp)
        {
            HandleReceivedErrorResponse(resp, null, null, null);
        }

        public static void HandleReceivedErrorResponse(SipResponse resp, User user, AsyncBizOperation op, ImpsErrorEventArgs eaError)
        {
            LogHelper.LogReceivedSipMessage(resp);
            if (eaError != null)
            {
                if (op != null)
                {
                    op.FireImpsErrorInUiThread(eaError);
                }
                else if (user != null)
                {
                    user.FireImpsErrorInUiThread(eaError);
                }
            }
        }

        public static void HandleSendRequestErrorAndTimeout(SipRequest req)
        {
            HandleSendRequestErrorAndTimeout(req, null, null, null);
        }

        public static void HandleSendRequestErrorAndTimeout(SipRequest req, User user, AsyncBizOperation op, string errmsg)
        {
            new ErrorAndTimeoutWraper(req, user, op, errmsg);
        }

        private class ErrorAndTimeoutWraper
        {
            private string _errmsg;
            private AsyncBizOperation _op;
            private SipRequest _req;
            private User _user;

            internal ErrorAndTimeoutWraper(SipRequest req, User user, AsyncBizOperation op, string errmsg)
            {
                this._errmsg = errmsg;
                this._req = req;
                this._user = user;
                this._op = op;
                req.SendMessageFailed += new EventHandler<FailedEventArgs>(this, (IntPtr) this.req_SendMessageFailed);
                req.WaitResponseTimeout += new EventHandler(this.req_WaitResponseTimeout);
            }

            private void DoFireImpsError()
            {
                if (!string.IsNullOrEmpty(this._errmsg))
                {
                    if (this._op != null)
                    {
                        this._op.FireImpsErrorInUiThread(new ImpsErrorEventArgs(this._errmsg));
                    }
                    else if (this._user != null)
                    {
                        this._user.FireImpsErrorInUiThread(new ImpsErrorEventArgs(this._errmsg));
                    }
                }
            }

            private void req_SendMessageFailed(object sender, FailedEventArgs e)
            {
                LogHelper.LogSendSipMessageFailed(this._req, e.Explain, e.FailedException);
                this.DoFireImpsError();
            }

            private void req_WaitResponseTimeout(object sender, EventArgs e)
            {
                LogHelper.LogWaitSipResponseTimeout(this._req);
                this.DoFireImpsError();
            }
        }
    }
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?