⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 navaction.cs

📁 破解的飞信源代码
💻 CS
字号:
namespace Imps.Client.Core
{
    using Imps.Client.Base;
    using Imps.Client.Utils;
    using Imps.Common;
    using System;
    using System.IO;
    using System.Net;
    using System.Text;
    using System.Threading;
    using System.Xml;
    using System.Xml.XPath;

    public sealed class NavAction : LoginAction
    {
        private const string errorMessage = "获取系统配置发生错误";
        private bool? localCacheHit;
        private string navUri;

        public NavAction(User user, ILoginListner listener) : base(user, listener)
        {
            this.navUri = Imps.Client.Core.FixedClientSetting.Instance.NavigatorServerUri;
            if (string.IsNullOrEmpty(this.navUri))
            {
                throw new ArgumentNullException("navigator uri should not be null!");
            }
        }

        public override void Cancel()
        {
        }

        private bool CheckLocalCache()
        {
            bool flag = false;
            ServerUriSetting serverUriSetting = base.User.Configuration.SystemSetting.ServerUriSetting;
            if (((base.User.Configuration.SystemSetting.SvrUriVerion > 0) && !string.IsNullOrEmpty(serverUriSetting.SipcProxy)) && !string.IsNullOrEmpty(serverUriSetting.UriHttpTunnel))
            {
                flag = true;
            }
            return flag;
        }

        public override void Clear()
        {
            base.User.Configuration.ClearSysCfg();
        }

        public override void Dispose()
        {
        }

        public bool DoExecute(ref bool isCompleted)
        {
            bool flag = false;
            isCompleted = true;
            try
            {
                string s = this.GetReqStr();
                byte[] bytes = Encoding.UTF8.GetBytes(s);
                string detail = string.Empty;
                base.NotifyMessage("开始获取系统配置,导航Url:" + this.navUri);
                HttpWebRequest request = ConnectionFactory.CreateHttpWebRequest(this.navUri, base.User, true, false);
                ClientLogger.WriteLogin("获取系统配置的参数:", 0, string.Format("Url:{0}, Post body:{1}", this.navUri, s), 2);
                request.KeepAlive = false;
                using (Stream stream = request.GetRequestStream())
                {
                    stream.Write(bytes, 0, bytes.Length);
                }
                using (HttpWebResponse response = ((HttpWebResponse) request.GetResponse()))
                {
                    try
                    {
                        string text3 = response.Headers["Date"];
                        if (!string.IsNullOrEmpty(text3))
                        {
                            User.ServerTime = DateTime.Parse(text3);
                        }
                    }
                    catch (Exception exception)
                    {
                        base.NotifyException("解析服务器时间的时候发生错误", exception);
                    }
                    using (Stream stream2 = response.GetResponseStream())
                    {
                        using (StreamReader reader = new StreamReader(stream2))
                        {
                            detail = reader.ReadToEnd();
                        }
                    }
                }
                ClientLogger.WriteLogin("获取系统配置的服务器响应信息:", 0, detail, 2);
                base.User.Configuration.InitSysSetting(detail);
                flag = true;
                base.NotifyMessage("获取系统配置完成");
            }
            catch (WebException exception2)
            {
                if ((--base.tryTimes > 0) && ExceptionHandler.IsRetryNeeded(exception2))
                {
                    base.NotifyException("获取系统配置发生错误", exception2);
                    isCompleted = false;
                    return flag;
                }
                base.NotifyLoginFailed("获取系统配置发生错误", ExceptionType.WebException, exception2);
            }
            catch (XmlException exception3)
            {
                base.NotifyLoginFailed("获取系统配置发生错误", ExceptionType.XmlException, exception3);
            }
            catch (XPathException exception4)
            {
                base.NotifyLoginFailed("获取系统配置发生错误", ExceptionType.XPathException, exception4);
            }
            catch (ThreadAbortException exception5)
            {
                base.NotifyWarning("获取系统配置发生错误", exception5);
            }
            catch (Exception exception6)
            {
                base.NotifyLoginFailed("获取系统配置发生错误", ExceptionType.CommonException, exception6);
            }
            return flag;
        }

        public override bool Execute()
        {
            bool isCompleted = false;
            bool flag2 = false;
            while (!isCompleted)
            {
                flag2 = this.DoExecute(ref isCompleted);
            }
            return flag2;
        }

        private string GetReqStr()
        {
            using (StringWriter w = new StringWriter())
            {
                using (XmlTextWriter writer2 = new XmlTextWriter(w))
                {
                    writer2.WriteStartElement("config");
                    writer2.WriteStartElement("user");
                    if (string.IsNullOrEmpty(base.User.MobileNo))
                    {
                        writer2.WriteAttributeString("sid", base.User.Sid.ToString());
                    }
                    else
                    {
                        writer2.WriteAttributeString("mobile-no", base.User.MobileNo);
                    }
                    writer2.WriteEndElement();
                    writer2.WriteStartElement("client");
                    writer2.WriteAttributeString("type", "PC");
                    writer2.WriteAttributeString("version", Configuration.FixedClientSetting.Version);
                    writer2.WriteAttributeString("platform", EnvHelper.GetOsString());
                    writer2.WriteEndElement();
                    writer2.WriteStartElement("servers");
                    writer2.WriteAttributeString("version", base.User.Configuration.SystemSetting.SvrUriVerion.ToString());
                    writer2.WriteEndElement();
                    writer2.WriteStartElement("service-no");
                    writer2.WriteAttributeString("version", base.User.Configuration.SystemSetting.SvcNoVerion.ToString());
                    writer2.WriteEndElement();
                    writer2.WriteStartElement("parameters");
                    writer2.WriteAttributeString("version", base.User.Configuration.SystemSetting.ParamsVerion.ToString());
                    writer2.WriteEndElement();
                    writer2.WriteStartElement("hints");
                    writer2.WriteAttributeString("version", base.User.Configuration.SystemSetting.HintsVerion.ToString());
                    writer2.WriteEndElement();
                    writer2.WriteStartElement("http-applications");
                    writer2.WriteAttributeString("version", base.User.Configuration.SystemSetting.HttpAppUriVerion.ToString());
                    writer2.WriteEndElement();
                    writer2.WriteStartElement("client-config");
                    writer2.WriteAttributeString("version", base.User.Configuration.SystemSetting.SysClientConfigVersion.ToString());
                    writer2.WriteEndElement();
                    writer2.WriteEndElement();
                }
                return w.ToString();
            }
        }

        public override bool LocalCacheHit
        {
            get
            {
                if (!this.localCacheHit.get_HasValue())
                {
                    try
                    {
                        base.NotifyMessage("开始加载系统配置本地缓存");
                        if (base.User.Sid <= 0)
                        {
                            long mappedSid = UserAccounts.GetMappedSid(base.User.MobileNo);
                            base.User.Sid = mappedSid;
                        }
                        base.User.Configuration.LoadSysCfg();
                        if (base.GetCurrentLoginPresence() == MainPresence.OfflineLogin)
                        {
                            return true;
                        }
                        if (!this.navUri.Equals(base.User.Configuration.SystemSetting.NavigatorServerUri, 1))
                        {
                            base.NotifyMessage("导航地址发生变化,清除本地相关缓存");
                            base.User.Configuration.ClearSysCfg();
                            string userId = base.User.PersistentManager.UserId.ToString();
                            base.User.PersistentManager.DelUserCfgById(userId);
                            base.User.PersistentManager.DelUserInfoById(userId);
                            base.User.PersistentManager.DelContactsInfoById(userId);
                            base.User.PersistentManager.DelPermissionById(userId);
                            base.ClearUri();
                        }
                        else if (!base.User.Configuration.SystemSetting.ClientVersion.Equals(Configuration.FixedClientSetting.Version))
                        {
                            base.User.Configuration.ClearSysCfg();
                            return false;
                        }
                        base.NotifyMessage("系统配置本地缓存加载完成");
                        this.localCacheHit = new bool?(this.CheckLocalCache());
                    }
                    catch (Exception exception)
                    {
                        this.localCacheHit = false;
                        base.NotifyException("系统配置本地缓存加载过程中出现错误", exception);
                    }
                }
                return this.localCacheHit.GetValueOrDefault(false);
            }
        }

        public override Imps.Client.Core.LoginStage LoginStage
        {
            get
            {
                return Imps.Client.Core.LoginStage.RetriveSystemConfig;
            }
        }
    }
}

⌨️ 快捷键说明

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