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

📄 contactpresence.cs

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

    public class ContactPresence : Imps.Client.Core.Presence
    {
        private bool? _isLogonPresence;
        private Contact _owner;
        private int _setCount;

        internal event EventHandler<ImpsValueChangedEventArgs<Imps.Common.MainPresence>> InnerMainPresenceChanged;

        internal event EventHandler<PropertiesChangedEventArgs> InnerPropertiesChanged;

        public ContactPresence(Contact owner) : base(Imps.Common.MainPresence.Invisible, string.Empty)
        {
            this._isLogonPresence = null;
            this._owner = owner;
        }

        public bool AsyncGetPresence(AsyncBizOperation op)
        {
            SipRequest req = this._owner.Owner.CreateSipRequest("S");
            req.Message.AddHeader(new SipcEventHeader("GetPresence"));
            req.Context = op;
            StringWriter tw = new StringWriter();
            XmlHelper.CreateXmlWriterForSipRequest(tw, null, delegate (XmlWriter writer, object context) {
                writer.WriteStartElement("query");
                writer.WriteStartElement("contacts");
                writer.WriteStartElement("contact");
                writer.WriteAttributeString("uri", this.Owner.Uri.Raw);
                writer.WriteEndElement();
                writer.WriteEndElement();
                writer.WriteStartElement("presence");
                writer.WriteStartElement("extended");
                writer.WriteAttributeString("types", "mobile-device-status");
                writer.WriteEndElement();
                writer.WriteEndElement();
                writer.WriteEndElement();
            });
            req.Message.Body = tw.ToString();
            tw.Dispose();
            ErrorHelper.HandleSendRequestErrorAndTimeout(req);
            req.FinalResponseReceived += new EventHandler<SipResponseReceivedEventArgs>(this, (IntPtr) this.req_FinalResponseReceived);
            this.Owner.Owner.SendSipMessage(req);
            return true;
        }

        internal override void Clear()
        {
            this._isLogonPresence = null;
            this._setCount = 0;
            base.Clear();
        }

        public bool IsDisplayOnline(Imps.Common.MainPresence mainPresence)
        {
            return (((mainPresence != Imps.Common.MainPresence.SmsOnline) && (mainPresence != Imps.Common.MainPresence.Offline)) && (this._owner.Type != ContactType.MobileBuddy));
        }

        protected override void OnPropertiesChanged(PropertiesChangedEventArgs e)
        {
            FuncDispatcher.OnEventHandler<PropertiesChangedEventArgs>(this, this.InnerPropertiesChanged, e);
            base.OnPropertiesChanged(e);
        }

        private void req_FinalResponseReceived(object sender, SipResponseReceivedEventArgs e)
        {
            SipResponse sipMsg = e.Response;
            if (!sipMsg.IsOK)
            {
                LogHelper.LogReceivedSipMessage(sipMsg);
            }
        }

        internal override void UpdateValue()
        {
            if (LoginFramework.GetCurrentLoginPresence(this.Owner.Owner) == Imps.Common.MainPresence.OfflineLogin)
            {
                this.Value = 0;
                return;
            }
            if (this.Owner.PersonalInfo.Provision == 0)
            {
                this.Value = 0;
                base.SmsStatus = new ProposedData<TimeSpan>(TimeSpan.MaxValue);
                return;
            }
            if (this._owner.Type != ContactType.PersonalGroupMember)
            {
                if (((this._owner.Type != ContactType.ChatFriend) && (this._owner.Type != ContactType.Stranger)) && (this._owner.Type != ContactType.MobileBuddy))
                {
                    int? relationStatus = this.Owner.RelationStatus;
                    if ((relationStatus.GetValueOrDefault() == 1) && relationStatus.get_HasValue())
                    {
                        goto Label_00B7;
                    }
                }
                this.Value = 1;
                return;
            }
        Label_00B7:
            if (this.RealValue == -1)
            {
                this.Value = 1;
            }
            else if ((this.RealValue == 0) && (base.SmsStatus.OriginalValue <= TimeSpan.Zero))
            {
                this.Value = 1;
            }
            else
            {
                base.UpdateValue();
            }
        }

        public ClientType ClientTypeType
        {
            get
            {
                return ClientTypeHelper.String2ClientType(base.ClientType);
            }
        }

        public Imps.Client.Core.CrbtToBuddy CrbtToBuddy
        {
            get
            {
                return base.InnerGetPropertyValue<Imps.Client.Core.CrbtToBuddy>("crbt-to-buddy");
            }
            internal set
            {
                base.InnerSetPropertyValue<Imps.Client.Core.CrbtToBuddy>("crbt-to-buddy", value);
            }
        }

        public bool IsLogonPresence
        {
            get
            {
                if (this._isLogonPresence.get_HasValue())
                {
                    return this._isLogonPresence.get_Value();
                }
                return (this._setCount <= 1);
            }
            internal set
            {
                this._isLogonPresence = new bool?(value);
            }
        }

        public override Imps.Common.MainPresence MainPresence
        {
            get
            {
                return (Imps.Common.MainPresence) this.Value;
            }
        }

        public string MoodPhrase
        {
            get
            {
                if (this.Owner.RelationStatusIsAgree)
                {
                    return base.InnerGetPropertyValue<string>("MoodPhrase");
                }
                return string.Empty;
            }
            internal set
            {
                base.InnerSetPropertyValue<string>("MoodPhrase", value);
            }
        }

        public Contact Owner
        {
            get
            {
                return this._owner;
            }
        }

        internal override int RealValue
        {
            get
            {
                return base.RealValue;
            }
            set
            {
                if (this._setCount <= 1)
                {
                    this._setCount++;
                }
                base.RealValue = value;
            }
        }

        public bool ShowCrbtToBuddyText
        {
            get
            {
                return base.InnerGetPropertyValue<bool>("show-crbt-to-buddy-text", true);
            }
            internal set
            {
                base.InnerSetPropertyValue<bool>("show-crbt-to-buddy-text", value);
            }
        }

        protected override int Value
        {
            get
            {
                return base.Value;
            }
            set
            {
                base.InnerSetPropertyValue<int>("value", value, true);
            }
        }
    }
}

⌨️ 快捷键说明

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