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

📄 userpresence.cs

📁 破解的飞信源代码
💻 CS
📖 第 1 页 / 共 3 页
字号:
                lock (this._syncObjPresence)
                {
                    if ((this._pendingPresence == basicPresence) && (this._pendingPresenceDesc == text))
                    {
                        if (this._previousPresencePriority > priority)
                        {
                            this._previousPresencePriority = priority;
                        }
                        if (op != null)
                        {
                            op.FireSuccessedInUiThread(EventArgs.Empty);
                        }
                        return;
                    }
                    this._pendingPresence = basicPresence;
                    this._pendingPresenceDesc = text;
                }
            }
            try
            {
                if (priority <= 0)
                {
                    List<IPresenceSensor>.Enumerator enumerator = this._sensors.GetEnumerator();
                    try
                    {
                        while (enumerator.MoveNext())
                        {
                            enumerator.get_Current().Reset();
                        }
                    }
                    finally
                    {
                        enumerator.Dispose();
                    }
                }
                SipRequest req = this.Owner.CreateSipRequest("S");
                req.Context = op;
                req.Message.AddHeader(new SipcEventHeader("SetPresence"));
                StringWriter tw = new StringWriter();
                if (writeContentCallback == null)
                {
                    writeContentCallback = delegate (XmlWriter writer, object context) {
                        writer.WriteStartElement("presence");
                        writer.WriteStartElement("basic");
                        writer.WriteAttributeString("value", ((int) basicPresence).ToString());
                        if (text.Length > 0)
                        {
                            writer.WriteAttributeString("desc", text);
                        }
                        writer.WriteEndElement();
                        writer.WriteEndElement();
                    };
                }
                XmlHelper.CreateXmlWriterForSipRequest(tw, null, writeContentCallback);
                req.Message.Body = tw.ToString();
                ErrorHelper.HandleSendRequestErrorAndTimeout(req, this.Owner, op, StringTable.Presence.MsgChangeFailed);
                if (handler == null)
                {
                    <>c__DisplayClass6 class2;
                    handler = new EventHandler<SipResponseReceivedEventArgs>(class2, (IntPtr) this.<InnerAsyncChangeMainPresence>b__3);
                }
                req.FinalResponseReceived += handler;
                this.Owner.SendSipMessage(req);
            }
            catch (Exception exception)
            {
                LogHelper.LogException(exception);
            }
        }

        private void load_crbttobuddy(XmlNode tones)
        {
            if (tones != null)
            {
                foreach (XmlNode node in tones.ChildNodes)
                {
                    CrbtToBuddy item = new CrbtToBuddy();
                    foreach (XmlNode node2 in node.ChildNodes)
                    {
                        switch (node2.Name)
                        {
                            case "tone-name":
                            {
                                item.ToneName = node2.InnerXml;
                                continue;
                            }
                            case "singer":
                            {
                                item.Singer = node2.InnerXml;
                                continue;
                            }
                            case "prelisten-url":
                            {
                                item.Url = node2.InnerXml;
                                continue;
                            }
                            case "sp-name":
                            {
                                item.ServiceProvider = node2.InnerXml;
                                continue;
                            }
                            case "region":
                            {
                                item.Region = node2.InnerXml;
                                continue;
                            }
                            case "tone-code":
                            {
                                item.ToneCode = node2.InnerXml;
                                continue;
                            }
                            case "tone-info":
                            {
                                item.ToneInfo = node2.InnerXml;
                                continue;
                            }
                            case "price":
                            {
                                double num = 0;
                                double.TryParse(node2.InnerXml, ref num);
                                item.Price = num;
                                continue;
                            }
                            case "tone-valid-day":
                            {
                                try
                                {
                                    DateTime time;
                                    DateTime.TryParse(node2.InnerXml, ref time);
                                    item.ToneValidDay = time;
                                }
                                catch
                                {
                                }
                                continue;
                            }
                            case "update-time":
                            {
                                try
                                {
                                    DateTime time2;
                                    DateTime.TryParse(node2.InnerXml, ref time2);
                                    item.UpdateTime = time2;
                                }
                                catch
                                {
                                }
                                continue;
                            }
                            case "download-times":
                            {
                                int num2 = 0;
                                int.TryParse(node2.InnerXml, ref num2);
                                item.DownloadTimes = num2;
                                continue;
                            }
                            case "tone-valid":
                            {
                                bool flag = false;
                                bool.TryParse(node2.InnerXml, ref flag);
                                item.IsExpired = flag;
                                continue;
                            }
                        }
                    }
                    if (this._crbtCol.FindCrbt(item.ToneCode) == null)
                    {
                        this._crbtCol.Add(item);
                    }
                }
            }
        }

        private void load_settings(XmlNode settings)
        {
            foreach (XmlNode node in settings.ChildNodes)
            {
                CrbtToBuddySetting item = new CrbtToBuddySetting();
                this._crbtToBuddySettings.Add(item);
                foreach (XmlNode node2 in node.ChildNodes)
                {
                    switch (node2.Name)
                    {
                        case "id":
                        {
                            item.Id = node2.InnerXml;
                            continue;
                        }
                        case "target-type":
                        {
                            int num;
                            int.TryParse(node2.InnerXml, ref num);
                            item.TargetType = num;
                            continue;
                        }
                        case "target":
                        {
                            item.Target = node2.InnerXml;
                            continue;
                        }
                        case "tone-code":
                        {
                            item.ToneCode = node2.InnerXml;
                            continue;
                        }
                        case "time-type":
                        {
                            int num2;
                            int.TryParse(node2.InnerXml, ref num2);
                            item.TimeType = num2;
                            continue;
                        }
                        case "start-time":
                        {
                            DateTime now = DateTime.Now;
                            try
                            {
                                DateTime.TryParse(node2.InnerXml, ref now);
                            }
                            catch
                            {
                            }
                            item.StartTime = now;
                            continue;
                        }
                        case "end-time":
                            break;

                        default:
                        {
                            continue;
                        }
                    }
                    DateTime time2 = DateTime.Now;
                    try
                    {
                        DateTime.TryParse(node2.InnerXml, ref time2);
                    }
                    catch
                    {
                    }
                    item.EndTime = time2;
                }
                if (2 == item.TargetType)
                {
                    CrbtToBuddySetting setting2;
                    if (!this.m_crbt_setting_map.TryGetValue(item.Target, ref setting2))
                    {
                        setting2 = item;
                        continue;
                    }
                    this.m_crbt_setting_map.Add(item.Target, item);
                }
            }
        }

        internal override void LoadXmlNode(XmlNode presenceNode)
        {
            base.LoadXmlNode(presenceNode);
            if (presenceNode != null)
            {
                Suspender suspender = new Suspender(this);
                try
                {
                    foreach (XmlNode node in presenceNode.SelectNodes("tones"))
                    {
                        this.load_crbttobuddy(node);
                    }
                    foreach (XmlNode node2 in presenceNode.SelectNodes("settings"))
                    {
                        this.load_settings(node2);
                    }
                    lock (this._owner.ContactList.Contacts.SyncRoot)
                    {
                        using (IEnumerator<Imps.Client.Core.Contact> enumerator3 = this._owner.ContactList.Contacts.GetEnumerator())
                        {
                            while (enumerator3.MoveNext())
                            {
                                Imps.Client.Core.Contact buddy = enumerator3.get_Current();
                                this.update_buddy_crbttobuddy(buddy);
                            }
                        }
                    }
                }
                finally
                {
                    suspender.Dispose();
                }
            }
        }

        public void RegisterSensor(IPresenceSensor sensor)
        {
            this._sensors.Add(sensor);
            this._sensors.Sort(new Comparison<IPresenceSensor>(null, (IntPtr) SensorComparison));
            this.EnableTimerTick(true);
        }

        public void RegisterSensors(IPresenceSensor[] sensors)
        {
            this._sensors.AddRange(sensors);
            this._sensors.Sort(new Comparison<IPresenceSensor>(null, (IntPtr) SensorComparison));
            this.EnableTimerTick(true);
        }

        private void ResetPendingPresence()

⌨️ 快捷键说明

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