📄 userpresence.cs
字号:
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 + -