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

📄 personalinfoaction.cs

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

    public sealed class PersonalInfoAction : LoginAction
    {
        private const string errorMessage = "获取个人信息过程中出现错误";
        private bool? localCacheHit;
        private bool result;
        private AutoResetEvent waitPersonalInfo;

        public PersonalInfoAction(User user, ILoginListner listener) : base(user, listener)
        {
        }

        public override void Cancel()
        {
        }

        public override void Clear()
        {
        }

        public override void Dispose()
        {
        }

        public override bool Execute()
        {
            XmlHelper.WriteXmlContentDelegate writeContentCallback = null;
            try
            {
                this.result = false;
                base.NotifyMessage("开始获取个人信息");
                SipRequest msg = base.User.CreateSipRequest("S");
                msg.Message.AddHeader(new SipcEventHeader("GetPersonalInfo"));
                using (StringWriter tw = new StringWriter())
                {
                    if (writeContentCallback == null)
                    {
                        writeContentCallback = delegate (XmlWriter writer, object context) {
                            writer.WriteStartElement("personal");
                            if (!string.IsNullOrEmpty(base.User.PersonalInfo.Version))
                            {
                                writer.WriteAttributeString("version", base.User.PersonalInfo.Version);
                            }
                            writer.WriteAttributeString("attributes", "all");
                            writer.WriteEndElement();
                            writer.WriteStartElement("services");
                            writer.WriteAttributeString("version", base.User.ServiceVersion);
                            writer.WriteAttributeString("attributes", "all");
                            writer.WriteEndElement();
                            writer.WriteStartElement("config");
                            writer.WriteAttributeString("version", base.User.Configuration.UserSetting.CfgVersion.ToString());
                            writer.WriteAttributeString("attributes", "all");
                            writer.WriteEndElement();
                            writer.WriteStartElement("mobile-device");
                            writer.WriteAttributeString("attributes", "all");
                            writer.WriteEndElement();
                        };
                    }
                    XmlHelper.CreateXmlWriterForSipRequest(tw, null, writeContentCallback);
                    msg.Message.Body = tw.ToString();
                }
                msg.FinalResponseReceived += new EventHandler<SipResponseReceivedEventArgs>(this, (IntPtr) this.req_FinalResponseReceived);
                msg.SendMessageFailed += new EventHandler<FailedEventArgs>(this, (IntPtr) this.req_SendMessageFailed);
                msg.WaitResponseTimeout += new EventHandler(this.req_WaitResponseTimeout);
                if (this.waitPersonalInfo == null)
                {
                    this.waitPersonalInfo = new AutoResetEvent(false);
                }
                base.User.SendSipMessage(msg);
                if (!this.waitPersonalInfo.WaitOne(this.TimeOut, false))
                {
                    ReflectionHelper.ClearAllEvents(msg);
                    base.NotifyLoginFailed("获取个人信息超时", ExceptionType.SipCException, null);
                }
                base.NotifyMessage("获取个人信息结束");
            }
            catch (ThreadAbortException exception)
            {
                base.NotifyWarning("获取个人信息过程中出现错误", exception);
            }
            catch (Exception exception2)
            {
                base.NotifyLoginFailed("获取个人信息过程中出现错误", ExceptionType.CommonException, exception2);
            }
            return this.result;
        }

        private void req_FinalResponseReceived(object sender, SipResponseReceivedEventArgs e)
        {
            PersistentDelegate save = null;
            SipResponse response = e.Response;
            try
            {
                if (response.Message.StatusCode == 200)
                {
                    XmlDocument document = new XmlDocument();
                    document.LoadXml(e.Response.Message.Body);
                    foreach (XmlNode node in document.DocumentElement.ChildNodes)
                    {
                        switch (node.Name)
                        {
                            case "config":
                            {
                                try
                                {
                                    node.Attributes.Remove(node.Attributes["save-message"]);
                                    base.User.Configuration.LoadUserSetting(document.DocumentElement);
                                }
                                catch (Exception exception)
                                {
                                    base.NotifyException("加载用户配置过程中出现错误", exception);
                                }
                                continue;
                            }
                            case "service":
                            {
                                if (node.Attributes.Count > 0)
                                {
                                    string text = XmlHelper.ReadXmlAttributeString(node, "version", true);
                                    if (text != base.User.ServiceVersion)
                                    {
                                        base.User.LoadServicesNode(node);
                                        base.User.ServiceVersion = text;
                                        if (save == null)
                                        {
                                            save = delegate (XmlNode node) {
                                                XmlHelper.SetNodeAttribute(node, "version", base.User.ServiceVersion);
                                                node.InnerXml = base.User.ToServiceNodeXml();
                                            };
                                        }
                                        base.User.PersistentManager.SaveSubscribedServiceInfos(save);
                                    }
                                }
                                continue;
                            }
                            case "personal":
                                break;

                            default:
                            {
                                continue;
                            }
                        }
                        if ((node.Attributes.Count > 0) && (XmlHelper.ReadXmlAttributeString(node, "version", true) != base.User.PersonalInfo.Version))
                        {
                            base.User.PersonalInfo.LoadPersonalXmlNode(node);
                            base.User.PersistentManager.SaveUserInfo(new PersistentDelegate(base.User.PersonalInfo.SaveToXmlNode));
                        }
                    }
                    this.result = true;
                    this.waitPersonalInfo.Set();
                }
                else
                {
                    base.NotifyLoginFailed("获取个人信息过程中出现错误", ExceptionType.SipCException, new SipCException(response.Message.StatusCode, "获取个人信息过程中出现错误"));
                    this.result = false;
                    this.waitPersonalInfo.Set();
                }
            }
            catch (Exception exception2)
            {
                base.NotifyLoginFailed("获取个人信息过程中出现错误", ExceptionType.CommonException, exception2);
                this.result = false;
                this.waitPersonalInfo.Set();
            }
        }

        private void req_SendMessageFailed(object sender, FailedEventArgs e)
        {
            base.NotifyLoginFailed("获取个人信息过程中出现错误", ExceptionType.CommonException, new SipCException(900, "获取个人信息过程中出现错误"));
            this.result = false;
            this.waitPersonalInfo.Set();
        }

        private void req_WaitResponseTimeout(object sender, EventArgs e)
        {
            base.NotifyLoginFailed("获取个人信息过程中出现错误", ExceptionType.SipCException, new SipCException(0x385, "获取个人信息过程中出现错误"));
            this.result = false;
            this.waitPersonalInfo.Set();
        }

        public override void Retry(RetryResult retryResult)
        {
            try
            {
                if (this.result)
                {
                    retryResult.IsCompleted = true;
                }
                else
                {
                    retryResult.IsSucceed = this.Execute();
                }
            }
            catch (Exception)
            {
            }
        }

        public override bool LocalCacheHit
        {
            get
            {
                if (!this.localCacheHit.get_HasValue())
                {
                    try
                    {
                        base.NotifyMessage("开始加载个人信息本地缓存");
                        int num = 0;
                        if (!string.IsNullOrEmpty(base.User.PersonalInfo.Version))
                        {
                            int.TryParse(base.User.PersonalInfo.Version, ref num);
                        }
                        this.localCacheHit = new bool?(num > 0);
                        base.NotifyMessage("个人信息本地缓存加载完毕");
                    }
                    catch (Exception exception)
                    {
                        base.NotifyException("获取个人信息过程中出现错误", exception);
                    }
                }
                return this.localCacheHit.get_Value();
            }
        }

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

⌨️ 快捷键说明

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