📄 contactlist.cs
字号:
handler2 = delegate {
this.AsyncSubscribePresenceBatchAll(isSub, op);
};
}
operation.Successed += handler2;
return true;
}
catch (Exception exception)
{
ClientLogger.WriteException(exception);
return false;
}
}
internal void Clear()
{
this.Groups.Clear();
this._hasLoadLocalStroage = null;
this.ClearContacts();
this.Version = "";
this._contactChangedEventArgsCol.Clear();
this.SubscribeExpiredSeconds = 0;
this._suspendCount = 0;
this._subCallId = -1;
this._subCSeq = -1;
this._newContactsAddByMobileNo = null;
this._penddingAddBuddyRequestUri = null;
this.RecentBuddies.Clear();
}
internal void ClearContacts()
{
try
{
using (IEnumerator<Imps.Client.Core.Contact> enumerator = this.Contacts.GetEnumerator())
{
while (enumerator.MoveNext())
{
enumerator.get_Current().Dispose();
}
}
}
catch
{
}
this.Contacts.Clear();
this.Buddies.Clear();
this.MobileBuddies.Clear();
this.ChatFriends.Clear();
this.Strangers.Clear();
}
private void finalResponse_AsyncInviteMobileOpenIMPSService(object sender, SipResponseReceivedEventArgs e)
{
SipResponse sipMsg = e.Response;
AsyncBizOperation context = (AsyncBizOperation) sipMsg.Request.Context;
if (!sipMsg.IsOK)
{
LogHelper.LogReceivedSipMessage(sipMsg);
switch (sipMsg.Message.StatusCode)
{
case 400:
context.FireImpsErrorInUiThread(new ImpsErrorEventArgs(StringTable.MsgBadRequest));
return;
case 460:
context.FireImpsErrorInUiThread(new ImpsErrorEventArgs(StringTable.MsgBuddyAlreadyOpenIIC));
return;
case 500:
context.FireImpsErrorInUiThread(new ImpsErrorEventArgs(StringTable.MsgSipRespInternalServerError));
return;
}
context.FireImpsErrorInUiThread(new ImpsErrorEventArgs(StringTable.MsgUnknownError));
}
else
{
context.FireSuccessedInUiThread(EventArgs.Empty);
}
}
private void finalResponseReceived_AddBuddyRequest(object sender, SipResponseReceivedEventArgs e)
{
try
{
SipResponse sipMsg = e.Response;
AsyncBizOperation op = (AsyncBizOperation) sipMsg.Request.Context;
ParamForBiz contextForBiz = (ParamForBiz) op.ContextForBiz;
IicUri iicUri = contextForBiz.IicUri;
bool? nullable = contextForBiz.Bool1;
if (this.PenddingAddBuddyRequestUri.Contains(iicUri))
{
this.PenddingAddBuddyRequestUri.Remove(iicUri);
}
if (sipMsg.IsOK)
{
XmlDocument document = new XmlDocument();
document.LoadXml(sipMsg.Message.Body);
XmlNode nodeContact = document.DocumentElement.SelectSingleNode("contacts");
this.parseAddBuddyResponseOrNotifyNode_UpdateBuddy(nodeContact, ParseBuddyType.AddBuddyResponse, op);
op.FireSuccessedInUiThread(EventArgs.Empty);
}
else if (sipMsg.Message.StatusCode == 0x20a)
{
string xml = sipMsg.Request.Message.Body;
if (xml.Length == 0)
{
op.FireImpsErrorInUiThread(new ImpsErrorEventArgs("添加好友失败。"));
}
else
{
XmlDocument document2 = new XmlDocument();
document2.LoadXml(xml);
XmlNode node = document2.DocumentElement.SelectSingleNode("/" + "args" + "/" + "contacts" + "/" + "buddies" + "/" + "buddy");
if (node == null)
{
op.FireImpsErrorInUiThread(new ImpsErrorEventArgs(string.Empty));
}
else
{
string uriString = XmlHelper.ReadXmlAttributeString(node, "uri");
if (uriString.Length == 0)
{
op.FireImpsErrorInUiThread(new ImpsErrorEventArgs(string.Empty));
}
else
{
IicUri uri2 = new IicUri(uriString);
if (!uri2.Belongs(IicUriType.Tel))
{
op.FireImpsErrorInUiThread(new ImpsErrorEventArgs("添加好友失败,可能原因是对方已经关闭服务。"));
}
else
{
string localName = XmlHelper.ReadXmlAttributeString(node, "local-name").Trim();
string targetGroupIdArr = XmlHelper.ReadXmlAttributeString(node, "buddy-lists");
string text5 = XmlHelper.ReadXmlAttributeString(node, "desc");
AddBuddyExtraData extraData = new AddBuddyExtraData();
extraData.WhoAmI = text5;
bool? nullable2 = nullable;
this.AsyncAddMobileBuddy(uri2.MobileNo, localName, targetGroupIdArr, nullable2.get_HasValue() ? nullable2.GetValueOrDefault() : false, extraData, op);
}
}
}
}
}
else
{
LogHelper.LogReceivedSipMessage(sipMsg);
switch (sipMsg.Message.StatusCode)
{
case 520:
base.Owner.FireImpsErrorInUiThread(new ImpsErrorEventArgs(StringTable.MsgAddMobileBuddyLimitExceeded, 0x9b), op);
return;
case 0x209:
base.Owner.FireImpsErrorInUiThread(new ImpsErrorEventArgs(StringTable.MsgAddBuddyAlreadyExist, 0x9a), op);
base.Owner.ContactList.AsyncReGetContactList(new AsyncBizOperation(), false);
return;
case 500:
base.Owner.FireImpsErrorInUiThread(new ImpsErrorEventArgs(StringTable.MsgSipRespInternalServerError, 0x99), op);
return;
case 0x1e6:
base.Owner.FireImpsErrorInUiThread(new ImpsErrorEventArgs(StringTable.MsgAddBuddyTooMuch, 0x9c), op);
return;
case 400:
base.Owner.FireImpsErrorInUiThread(new ImpsErrorEventArgs(StringTable.MsgBadRequest, 0x98), op);
return;
case 0x194:
if (iicUri.Belongs(IicUriType.Tel))
{
base.Owner.FireImpsErrorInUiThread(new ImpsErrorEventArgs(StringTable.MsgMoibleNoNotExist, 0x9d), op);
}
else
{
base.Owner.FireImpsErrorInUiThread(new ImpsErrorEventArgs(StringTable.MsgSidNotExist, 0x9d), op);
}
return;
}
base.Owner.FireImpsErrorInUiThread(new ImpsErrorEventArgs(StringTable.MsgUnknownError, 10), op);
}
}
catch (Exception exception)
{
LogHelper.LogException(exception);
}
}
private void finalResponseReceived_AddChatFriend(object sender, SipResponseReceivedEventArgs e)
{
SipResponse sipMsg = e.Response;
if (sipMsg != null)
{
AsyncBizOperation op = (AsyncBizOperation) sipMsg.Request.Context;
if (sipMsg.IsOK)
{
XmlDocument document = new XmlDocument();
document.LoadXml(sipMsg.Message.Body);
XmlNode node = document.DocumentElement.SelectSingleNode("contacts");
if (node == null)
{
LogHelper.LogReceivedSipMessage(sipMsg);
base.Owner.FireImpsErrorInUiThread(new ImpsErrorEventArgs(StringTable.ChatFriend.AddFailed), op);
}
else
{
string text = XmlHelper.ReadXmlAttributeString(node, "version");
if (text.Length == 0)
{
LogHelper.LogReceivedSipMessage(sipMsg);
base.Owner.FireImpsErrorInUiThread(new ImpsErrorEventArgs(StringTable.ChatFriend.AddFailed), op);
}
else
{
string xpath = "chat-friends" + "/" + "chat-friend";
XmlNode node2 = node.SelectSingleNode(xpath);
if (node2 == null)
{
LogHelper.LogReceivedSipMessage(sipMsg);
base.Owner.FireImpsErrorInUiThread(new ImpsErrorEventArgs(StringTable.ChatFriend.AddFailed), op);
}
else
{
string uri = XmlHelper.ReadXmlAttributeString(node2, "uri");
if (uri.Length == 0)
{
LogHelper.LogReceivedSipMessage(sipMsg);
base.Owner.FireImpsErrorInUiThread(new ImpsErrorEventArgs(StringTable.ChatFriend.AddFailed), op);
}
else if (this.Contacts.FindContact(uri) == null)
{
Imps.Client.Core.ContactGroup item = this.Groups[-1] as Imps.Client.Core.ContactGroup;
if (item == null)
{
item = new Imps.Client.Core.ContactGroup(base.Owner, -1, StringTable.ContactGroup.ChatFriendGroup);
this.Groups.Add(item);
}
Imps.Client.Core.ChatFriend contact = new Imps.Client.Core.ChatFriend(base.Owner, uri);
this.AddContact(contact);
item.Contacts.Add(contact);
this.InnerOnContactChanged(new ContactChangedEventArgs(contact, ContactEventType.Added));
this.Version = text;
this.SaveContactListXml();
}
}
}
}
}
else
{
LogHelper.LogReceivedSipMessage(sipMsg);
switch (sipMsg.Message.StatusCode)
{
case 400:
base.Owner.FireImpsErrorInUiThread(new ImpsErrorEventArgs(StringTable.ChatFriend.AddFailed), op);
return;
case 500:
base.Owner.FireImpsErrorInUiThread(new ImpsErrorEventArgs(StringTable.ChatFriend.AddFailed), op);
return;
}
base.Owner.FireImpsErrorInUiThread(new ImpsErrorEventArgs(StringTable.ChatFriend.AddFailed), op);
}
}
}
private void finalResponseReceived_AddToBlackList(object sender, SipResponseReceivedEventArgs e)
{
SipResponse sipMsg = e.Response;
AsyncBizOperation op = (AsyncBizOperation) sipMsg.Request.Context;
if (!sipMsg.IsOK)
{
LogHelper.L
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -