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

📄 personalgroupdialog.cs

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

    public class PersonalGroupDialog : Dialog
    {
        private PersonalGroup _group;
        private List<SipRequest> _receiveMessages;

        public PersonalGroupDialog(Conversation conv, PersonalGroup group) : base(conv)
        {
            this._group = group;
            base.To = group.Uri.Raw;
        }

        protected override bool CanReceiveContactMessage(Contact contact)
        {
            if ((contact is PersonalGroupMember) && (contact as PersonalGroupMember).GroupMemeberInfo.IsBlocked.Value)
            {
                return false;
            }
            return true;
        }

        internal override void Close(bool bye)
        {
            base.Close(bye);
            this._group = null;
        }

        protected override void DoAddChatFriend(Contact contact)
        {
        }

        protected override void DoAutoReplay(SipRequest req)
        {
        }

        protected override void DoCCToSms(SipRequest req, Contact contact)
        {
        }

        protected override void DoFindConversationWindow(Contact contact, Message msg)
        {
            if (((PersonalGroupReceiveMessagePolicy) this.Group.UserInfo.GroupReceiveMessagePolicy.Value) == PersonalGroupReceiveMessagePolicy.Accept)
            {
                base.DoFindConversationWindow(contact, msg);
            }
        }

        protected override void DoReceiveBye(SipRequest req)
        {
            base.DoReceiveBye(req);
            this._group.GroupConversation = null;
        }

        internal override void DoReceiveMessage(SipRequest req)
        {
            if ((((req.Message.From.Value == this.Group.Uri.Raw) && (((PersonalGroupReceiveMessagePolicy) this.Group.UserInfo.GroupReceiveMessagePolicy.Value) != ((PersonalGroupReceiveMessagePolicy) 0))) && (((PersonalGroupReceiveMessagePolicy) this.Group.UserInfo.GroupReceiveMessagePolicy.Value) != PersonalGroupReceiveMessagePolicy.Reject)) && (this.Group.MemberLoadStatus != PersonalGroupLoadStatus.Failed))
            {
                if (this.Group.MemberLoadStatus == PersonalGroupLoadStatus.None)
                {
                    base.Owner.PersonalGroupManager.GetGroupMemberList(this.Group, new AsyncBizOperation());
                }
                if ((this.Group.MemberLoadStatus == PersonalGroupLoadStatus.Loading) && (this.Group.Members.Count == 0))
                {
                    if (this._receiveMessages == null)
                    {
                        this._receiveMessages = new List<SipRequest>();
                        this.Group.MemberLoadStatusChanged += new EventHandler<GroupLoadStatusChangedEventArgs>(this, (IntPtr) this.Group_MemberLoadStatusChanged);
                    }
                    this._receiveMessages.Add(req);
                }
                else
                {
                    base.DoReceiveMessage(req);
                }
            }
        }

        protected override void DoSendMessageResponse(SipResponseReceivedEventArgs e, SipRequest request)
        {
            try
            {
                if (e.Response.Message.StatusCode == 0x1e1)
                {
                    if (base.Status != DialogStatus.Inviting)
                    {
                        base.AsyncSendInvite();
                    }
                    this._group.GroupConversation.CurrentDialog.AsyncSendIm((request.Context as Message).Content);
                }
                else
                {
                    base.DoSendMessageResponse(e, request);
                }
            }
            catch (Exception exception)
            {
                ClientLogger.WriteException(exception);
            }
        }

        protected override Contact GetMessageContact(SipRequest req)
        {
            if (req.Message.SourceHeader == null)
            {
                ClientLogger.WriteGeneral("群收到的消息没有SourceHeader: " + this.Group.Uri.Raw);
                return null;
            }
            if (this.Group.Members[req.Message.SourceHeader.RawValue] != null)
            {
                return this.Group.Members[req.Message.SourceHeader.RawValue];
            }
            return base.GetMessageContact(req);
        }

        private void Group_MemberLoadStatusChanged(object sender, GroupLoadStatusChangedEventArgs e)
        {
            this.Group.MemberLoadStatusChanged -= new EventHandler<GroupLoadStatusChangedEventArgs>(this, (IntPtr) this.Group_MemberLoadStatusChanged);
            if (this._receiveMessages != null)
            {
                ThreadPool.QueueUserWorkItem(delegate (object context) {
                    List<SipRequest>.Enumerator enumerator = this._receiveMessages.GetEnumerator();
                    try
                    {
                        while (enumerator.MoveNext())
                        {
                            SipRequest req = enumerator.get_Current();
                            this.DoReceiveMessage(req);
                        }
                    }
                    finally
                    {
                        enumerator.Dispose();
                    }
                    this._receiveMessages.Clear();
                    this._receiveMessages = null;
                });
            }
        }

        protected override void UpdateRecentBuddies()
        {
        }

        public PersonalGroup Group
        {
            get
            {
                return this._group;
            }
            set
            {
                this._group = value;
            }
        }

        public override Imps.Client.Core.MessageType MessageType
        {
            get
            {
                return Imps.Client.Core.MessageType.IM;
            }
        }

        internal override string MyDisplayName
        {
            get
            {
                if (string.IsNullOrEmpty((string) this._group.UserInfo.GroupNickName))
                {
                    return base.MyDisplayName;
                }
                return (string) this._group.UserInfo.GroupNickName;
            }
        }
    }
}

⌨️ 快捷键说明

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