Esempio n. 1
0
 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);
 }
Esempio n. 2
0
        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;
            }
        }
Esempio n. 3
0
        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);
        }
Esempio n. 4
0
        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);
        }
Esempio n. 5
0
 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));
     }
 }
Esempio n. 6
0
 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);
     }
 }
Esempio n. 7
0
 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);
 }
Esempio n. 8
0
        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));
        }
Esempio n. 9
0
 private void ProcessUnsubscribeRequest(S22.Xmpp.Im.Presence presence)
 {
     this.Unsubscribed.Raise <UnsubscribedEventArgs>(this, new UnsubscribedEventArgs(presence.From));
 }