📄 personalgroupdialog.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 + -