📄 mobilebuddy.cs
字号:
namespace Imps.Client.Core
{
using Imps.Base.Sipc;
using Imps.Client.Base;
using Imps.Client.Resource;
using Imps.Common;
using Imps.Utils;
using System;
using System.Collections.Generic;
using System.IO;
using System.Xml;
public class MobileBuddy : NonFederationContact
{
private string _notes;
public MobileBuddy(Imps.Client.Core.User owner, string uri) : base(owner, uri)
{
this.PersonalInfo.MobileNo = base.Uri.MobileNo;
}
public MobileBuddy(Imps.Client.Core.User owner, string uri, bool getInfo) : base(owner, uri, getInfo)
{
this.PersonalInfo.MobileNo = base.Uri.MobileNo;
}
public override bool AsyncDelete(AsyncBizOperation op)
{
SipRequest req = base.Owner.CreateSipRequest("S");
req.Message.AddHeader(new SipcEventHeader("DeleteMobileBuddy"));
req.Context = op;
StringWriter tw = new StringWriter();
XmlHelper.CreateXmlWriterForSipRequest(tw, null, delegate (XmlWriter writer, object context) {
writer.WriteStartElement("contacts");
writer.WriteStartElement("mobile-buddies");
writer.WriteStartElement("mobile-buddy");
writer.WriteAttributeString("uri", base.Uri.Raw);
writer.WriteEndElement();
writer.WriteEndElement();
writer.WriteEndElement();
});
req.Message.Body = tw.ToString();
tw.Dispose();
ErrorHelper.HandleSendRequestErrorAndTimeout(req);
req.FinalResponseReceived += new EventHandler<SipResponseReceivedEventArgs>(this, (IntPtr) this.finalResponseReceived_AsyncDelete);
base.SendSipMessage(req);
return true;
}
private void finalResponseReceived_AsyncDelete(object sender, SipResponseReceivedEventArgs e)
{
SipResponse sipMsg = e.Response;
AsyncBizOperation op = (AsyncBizOperation) sipMsg.Request.Context;
if (!sipMsg.IsOK)
{
LogHelper.LogReceivedSipMessage(sipMsg);
switch (sipMsg.Message.StatusCode)
{
case 400:
base.Owner.FireImpsErrorInUiThread(new ImpsErrorEventArgs(StringTable.MsgBadRequest), op);
return;
case 0x194:
base.Owner.ContactList.AsyncReGetContactList(new AsyncBizOperation(), false);
return;
case 500:
base.Owner.FireImpsErrorInUiThread(new ImpsErrorEventArgs(StringTable.MsgSipRespInternalServerError), op);
return;
}
base.Owner.FireImpsErrorInUiThread(new ImpsErrorEventArgs(StringTable.MsgUnknownError), op);
}
else
{
XmlDocument document = new XmlDocument();
document.LoadXml(sipMsg.Message.Body);
string text = XmlHelper.ReadXmlAttributeString(document.DocumentElement.SelectSingleNode("contacts"), "version");
if (text.Length == 0)
{
LogHelper.LogFatalError("AsyncDeleteBuddy,服务器返回节点错误");
LogHelper.LogReceivedSipMessage(sipMsg);
}
else
{
string xpath = "contacts" + "/" + "mobile-buddies" + "/" + "mobile-buddy";
string uriString = XmlHelper.ReadXmlAttributeString(document.DocumentElement.SelectSingleNode(xpath), "uri");
if (!new IicUri(uriString).IsValid || (uriString != base.Uri.Raw))
{
LogHelper.LogFatalError("AsyncDeleteMobileBuddy,服务器返回uri错误");
LogHelper.LogReceivedSipMessage(sipMsg);
base.Owner.FireImpsErrorInUiThread(new ImpsErrorEventArgs(StringTable.MsgDeleteMobileBuddyFailed), op);
}
else
{
base.Owner.ContactList.RemoveContact((Imps.Client.Core.Contact) this);
base.Owner.ContactList.Version = text;
base.Owner.ContactList.SaveContactListXml();
}
}
}
}
internal void WriteContactListInfoXml(XmlTextWriter writer)
{
string text = string.Empty;
using (IEnumerator<int> enumerator = base.BelongToGroups.GetEnumerator())
{
while (enumerator.MoveNext())
{
int num = enumerator.get_Current();
text = text + num + ";";
}
}
if (text.Length > 0)
{
text = text.Substring(0, text.Length - 1);
}
writer.WriteStartElement("mobile-buddy");
writer.WriteAttributeString("uri", base.Uri.Raw);
writer.WriteAttributeString("local-name", this.InnerLocalName);
writer.WriteAttributeString("buddy-lists", text);
writer.WriteAttributeString("relation-status", base.RelationStatus.ToString());
writer.WriteEndElement();
}
internal override void WriteContactSetInfoXml(XmlTextWriter writer)
{
writer.WriteStartElement("contact");
writer.WriteAttributeString("uri", base.Uri.Raw);
writer.WriteStartElement("personal");
writer.WriteAttributeString("version", this.PersonalInfo.Version.ToString());
writer.WriteAttributeString("name", this.PersonalInfo.Name.ContactSetData);
writer.WriteAttributeString("mobile-no", base.MobileNo.ToString());
writer.WriteEndElement();
writer.WriteEndElement();
}
public override bool CanSaveAndUseMyPortrait
{
get
{
return false;
}
}
internal override bool CanSubscribedPresence
{
get
{
return false;
}
}
public override string DisplayName
{
get
{
return this.PersonalInfo.DisplayName;
}
internal set
{
this.PersonalInfo.Name = this.PersonalInfo.Name.CloneWithUserSetValue(value, string.Empty);
this.PersonalInfo.UpdateDisplayName();
}
}
public override bool EnableEditUserSetProfile
{
get
{
return true;
}
}
public override bool EnableGetContactInfo
{
get
{
return false;
}
}
public override bool EnableSMS
{
get
{
int? relationStatus = base.RelationStatus;
if ((relationStatus.GetValueOrDefault() == 1) && relationStatus.get_HasValue())
{
return !base.IsBlocked;
}
return false;
}
}
public string Notes
{
get
{
return this._notes;
}
internal set
{
this._notes = value;
}
}
public override ContactType Type
{
get
{
return ContactType.MobileBuddy;
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -