public void RevokeSubscription(S22.Xmpp.Jid jid) { this.AssertValid(true); jid.ThrowIfNull <S22.Xmpp.Jid>("jid"); S22.Xmpp.Im.Presence presence = new S22.Xmpp.Im.Presence(jid, null, PresenceType.Unsubscribed, null, null, new XmlElement[0]); this.SendPresence(presence); }
private void OnPresence(S22.Xmpp.Im.Presence presence) { this.IsHasRosterOnline = true; foreach (XmppExtension extension in this.extensions) { IInputFilter <S22.Xmpp.Im.Presence> filter = extension as IInputFilter <S22.Xmpp.Im.Presence>; if ((filter != null) && filter.Input(presence)) { return; } } switch (presence.Type) { case PresenceType.Available: case PresenceType.Unavailable: this.ProcessStatusNotification(presence); break; case PresenceType.Subscribe: this.ProcessSubscriptionRequest(presence); break; case PresenceType.Subscribed: case PresenceType.Unsubscribed: this.ProcessSubscriptionResult(presence); break; case PresenceType.Unsubscribe: this.ProcessUnsubscribeRequest(presence); break; } }
public void SetStatus(Availability availability, string message = null, sbyte priority = 0, CultureInfo language = null) { this.AssertValid(true); if (availability == Availability.Offline) { throw new ArgumentException("Invalid availability state."); } List <XmlElement> list = new List <XmlElement>(); if (availability != Availability.Online) { Dictionary <Availability, string> dictionary2 = new Dictionary <Availability, string>(); dictionary2.Add(Availability.Away, "away"); dictionary2.Add(Availability.DoNotDisturb, "dnd"); dictionary2.Add(Availability.ExtendedAway, "xa"); dictionary2.Add(Availability.Chat, "chat"); Dictionary <Availability, string> dictionary = dictionary2; list.Add(Xml.Element("show", null).Text(dictionary[availability])); } if (priority != 0) { list.Add(Xml.Element("priority", null).Text(priority.ToString())); } if (message != null) { list.Add(Xml.Element("status", null).Text(message)); } S22.Xmpp.Im.Presence presence = new S22.Xmpp.Im.Presence(null, null, PresenceType.Available, null, language, list.ToArray()); this.SendPresence(presence); }
public void SetStatus(Availability availability, Dictionary <string, string> messages, sbyte priority = 0) { this.AssertValid(true); if (availability == Availability.Offline) { throw new InvalidOperationException("Invalid availability state."); } List <XmlElement> list = new List <XmlElement>(); if (availability != Availability.Online) { Dictionary <Availability, string> dictionary2 = new Dictionary <Availability, string>(); dictionary2.Add(Availability.Away, "away"); dictionary2.Add(Availability.DoNotDisturb, "dnd"); dictionary2.Add(Availability.ExtendedAway, "xa"); dictionary2.Add(Availability.Chat, "chat"); Dictionary <Availability, string> dictionary = dictionary2; list.Add(Xml.Element("show", null).Text(dictionary[availability])); } if (priority != 0) { list.Add(Xml.Element("priority", null).Text(priority.ToString())); } if (messages != null) { foreach (KeyValuePair <string, string> pair in messages) { XmlElement e = Xml.Element("status", null).Attr("xml:lang", pair.Key); list.Add(e.Text(pair.Value)); } } S22.Xmpp.Im.Presence presence = new S22.Xmpp.Im.Presence(null, null, PresenceType.Available, null, null, list.ToArray()); this.SendPresence(presence); }
private void ProcessSubscriptionResult(S22.Xmpp.Im.Presence presence) { if (presence.Type == PresenceType.Subscribed) { this.SubscriptionApproved.Raise <SubscriptionApprovedEventArgs>(this, new SubscriptionApprovedEventArgs(presence.From)); } else { this.SubscriptionRefused.Raise <SubscriptionRefusedEventArgs>(this, new SubscriptionRefusedEventArgs(presence.From)); } }
private void ProcessSubscriptionRequest(S22.Xmpp.Im.Presence presence) { if ((this.SubscriptionRequest != null) && this.SubscriptionRequest(presence.From)) { this.ApproveSubscriptionRequest(presence.From); } else { this.RefuseSubscriptionRequest(presence.From); } }
internal void SendPresence(S22.Xmpp.Im.Presence presence) { presence.ThrowIfNull <S22.Xmpp.Im.Presence>("presence"); foreach (XmppExtension extension in this.extensions) { IOutputFilter <S22.Xmpp.Im.Presence> filter = extension as IOutputFilter <S22.Xmpp.Im.Presence>; if (filter != null) { filter.Output(presence); } } this.core.SendPresence(presence); }
private void ProcessStatusNotification(S22.Xmpp.Im.Presence presence) { bool flag = presence.Type == PresenceType.Unavailable; XmlElement element = presence.Data["show"]; Availability availability = flag ? Availability.Offline : Availability.Online; if (!flag && !((element == null) || string.IsNullOrEmpty(element.InnerText))) { string str = element.InnerText.Capitalize(); availability = (Availability)Enum.Parse(typeof(Availability), str); } sbyte priority = 0; element = presence.Data["priority"]; if (!((element == null) || string.IsNullOrEmpty(element.InnerText))) { priority = sbyte.Parse(element.InnerText); } string attribute = presence.Data.GetAttribute("xml:lang"); Dictionary <string, string> messages = new Dictionary <string, string>(); if (string.IsNullOrEmpty(attribute)) { attribute = this.core.Language.Name; } foreach (XmlNode node in presence.Data.GetElementsByTagName("status")) { XmlElement element2 = node as XmlElement; if (element2 != null) { string str3 = element2.GetAttribute("xml:lang"); if (string.IsNullOrEmpty(str3)) { str3 = attribute; } messages.Add(str3, element2.InnerText); } } S22.Xmpp.Im.Status status = new S22.Xmpp.Im.Status(availability, messages, priority); this.Status.Raise <StatusEventArgs>(this, new StatusEventArgs(presence.From, status)); }
private void ProcessUnsubscribeRequest(S22.Xmpp.Im.Presence presence) { this.Unsubscribed.Raise <UnsubscribedEventArgs>(this, new UnsubscribedEventArgs(presence.From)); }