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

📄 mobilebuddy.cs

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

    public class MobileBuddy : NonFederationContact
    {
        private string _notes;

        public MobileBuddy(Imps.Client.Core.User owner, string uri) : base(owner, uri)
        {
            this.PersonalInfo.MobileNo = base.Uri.MobileNo;
        }

        public MobileBuddy(Imps.Client.Core.User owner, string uri, bool getInfo) : base(owner, uri, getInfo)
        {
            this.PersonalInfo.MobileNo = base.Uri.MobileNo;
        }

        public override bool AsyncDelete(AsyncBizOperation op)
        {
            SipRequest req = base.Owner.CreateSipRequest("S");
            req.Message.AddHeader(new SipcEventHeader("DeleteMobileBuddy"));
            req.Context = op;
            StringWriter tw = new StringWriter();
            XmlHelper.CreateXmlWriterForSipRequest(tw, null, delegate (XmlWriter writer, object context) {
                writer.WriteStartElement("contacts");
                writer.WriteStartElement("mobile-buddies");
                writer.WriteStartElement("mobile-buddy");
                writer.WriteAttributeString("uri", base.Uri.Raw);
                writer.WriteEndElement();
                writer.WriteEndElement();
                writer.WriteEndElement();
            });
            req.Message.Body = tw.ToString();
            tw.Dispose();
            ErrorHelper.HandleSendRequestErrorAndTimeout(req);
            req.FinalResponseReceived += new EventHandler<SipResponseReceivedEventArgs>(this, (IntPtr) this.finalResponseReceived_AsyncDelete);
            base.SendSipMessage(req);
            return true;
        }

        private void finalResponseReceived_AsyncDelete(object sender, SipResponseReceivedEventArgs e)
        {
            SipResponse sipMsg = e.Response;
            AsyncBizOperation op = (AsyncBizOperation) sipMsg.Request.Context;
            if (!sipMsg.IsOK)
            {
                LogHelper.LogReceivedSipMessage(sipMsg);
                switch (sipMsg.Message.StatusCode)
                {
                    case 400:
                        base.Owner.FireImpsErrorInUiThread(new ImpsErrorEventArgs(StringTable.MsgBadRequest), op);
                        return;

                    case 0x194:
                        base.Owner.ContactList.AsyncReGetContactList(new AsyncBizOperation(), false);
                        return;

                    case 500:
                        base.Owner.FireImpsErrorInUiThread(new ImpsErrorEventArgs(StringTable.MsgSipRespInternalServerError), op);
                        return;
                }
                base.Owner.FireImpsErrorInUiThread(new ImpsErrorEventArgs(StringTable.MsgUnknownError), op);
            }
            else
            {
                XmlDocument document = new XmlDocument();
                document.LoadXml(sipMsg.Message.Body);
                string text = XmlHelper.ReadXmlAttributeString(document.DocumentElement.SelectSingleNode("contacts"), "version");
                if (text.Length == 0)
                {
                    LogHelper.LogFatalError("AsyncDeleteBuddy,服务器返回节点错误");
                    LogHelper.LogReceivedSipMessage(sipMsg);
                }
                else
                {
                    string xpath = "contacts" + "/" + "mobile-buddies" + "/" + "mobile-buddy";
                    string uriString = XmlHelper.ReadXmlAttributeString(document.DocumentElement.SelectSingleNode(xpath), "uri");
                    if (!new IicUri(uriString).IsValid || (uriString != base.Uri.Raw))
                    {
                        LogHelper.LogFatalError("AsyncDeleteMobileBuddy,服务器返回uri错误");
                        LogHelper.LogReceivedSipMessage(sipMsg);
                        base.Owner.FireImpsErrorInUiThread(new ImpsErrorEventArgs(StringTable.MsgDeleteMobileBuddyFailed), op);
                    }
                    else
                    {
                        base.Owner.ContactList.RemoveContact((Imps.Client.Core.Contact) this);
                        base.Owner.ContactList.Version = text;
                        base.Owner.ContactList.SaveContactListXml();
                    }
                }
            }
        }

        internal void WriteContactListInfoXml(XmlTextWriter writer)
        {
            string text = string.Empty;
            using (IEnumerator<int> enumerator = base.BelongToGroups.GetEnumerator())
            {
                while (enumerator.MoveNext())
                {
                    int num = enumerator.get_Current();
                    text = text + num + ";";
                }
            }
            if (text.Length > 0)
            {
                text = text.Substring(0, text.Length - 1);
            }
            writer.WriteStartElement("mobile-buddy");
            writer.WriteAttributeString("uri", base.Uri.Raw);
            writer.WriteAttributeString("local-name", this.InnerLocalName);
            writer.WriteAttributeString("buddy-lists", text);
            writer.WriteAttributeString("relation-status", base.RelationStatus.ToString());
            writer.WriteEndElement();
        }

        internal override void WriteContactSetInfoXml(XmlTextWriter writer)
        {
            writer.WriteStartElement("contact");
            writer.WriteAttributeString("uri", base.Uri.Raw);
            writer.WriteStartElement("personal");
            writer.WriteAttributeString("version", this.PersonalInfo.Version.ToString());
            writer.WriteAttributeString("name", this.PersonalInfo.Name.ContactSetData);
            writer.WriteAttributeString("mobile-no", base.MobileNo.ToString());
            writer.WriteEndElement();
            writer.WriteEndElement();
        }

        public override bool CanSaveAndUseMyPortrait
        {
            get
            {
                return false;
            }
        }

        internal override bool CanSubscribedPresence
        {
            get
            {
                return false;
            }
        }

        public override string DisplayName
        {
            get
            {
                return this.PersonalInfo.DisplayName;
            }
            internal set
            {
                this.PersonalInfo.Name = this.PersonalInfo.Name.CloneWithUserSetValue(value, string.Empty);
                this.PersonalInfo.UpdateDisplayName();
            }
        }

        public override bool EnableEditUserSetProfile
        {
            get
            {
                return true;
            }
        }

        public override bool EnableGetContactInfo
        {
            get
            {
                return false;
            }
        }

        public override bool EnableSMS
        {
            get
            {
                int? relationStatus = base.RelationStatus;
                if ((relationStatus.GetValueOrDefault() == 1) && relationStatus.get_HasValue())
                {
                    return !base.IsBlocked;
                }
                return false;
            }
        }

        public string Notes
        {
            get
            {
                return this._notes;
            }
            internal set
            {
                this._notes = value;
            }
        }

        public override ContactType Type
        {
            get
            {
                return ContactType.MobileBuddy;
            }
        }
    }
}

⌨️ 快捷键说明

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