コード例 #1
0
        private void XmppOnOnRosterItem(object sender, RosterItem item)
        {
            //Friends.Add(item.);
            switch (item.Subscription)
            {
            case SubscriptionType.none:
                if (item.Jid.Server == "conference." + Host)
                {
                    Chatting.GetRoom(new NewUser(item.Jid), true);
                }
                break;

            case SubscriptionType.to:
                if (item.Jid.User == Me.User.User)
                {
                    break;
                }
                if (Friends.Count(x => x.User.User == item.Jid.User) == 0)
                {
                    Friends.Add(new NewUser(item.Jid));
                }
                break;

            case SubscriptionType.from:
                if (item.Jid.User == Me.User.User)
                {
                    break;
                }
                if (Friends.Count(x => x.User.User == item.Jid.User) == 0)
                {
                    Friends.Add(new NewUser(item.Jid));
                }
                break;

            case SubscriptionType.both:
                if (item.Jid.User == Me.User.User)
                {
                    break;
                }
                if (Friends.Count(x => x.User.User == item.Jid.User) == 0)
                {
                    Friends.Add(new NewUser(item.Jid));
                }
                break;

            case SubscriptionType.remove:
                if (Friends.Contains(new NewUser(item.Jid)))
                {
                    Friends.Remove(new NewUser(item.Jid));
                }
                break;
            }
        }
コード例 #2
0
        private void XmppOnOnPresence(object sender, Presence pres)
        {
            //if (pres.From.User != "lobby") Debugger.Break();
            if (pres.From.User == Xmpp.MyJID.User)
            {
                if (pres.Type == PresenceType.subscribe)
                {
                    Xmpp.PresenceManager.ApproveSubscriptionRequest(pres.From);
                }
                else
                {
                    myPresence      = pres;
                    myPresence.Type = PresenceType.available;
                    if (pres.Show != ShowType.NONE)
                    {
                        myPresence.Show = pres.Show;
                    }
                    Xmpp.Status = myPresence.Status ?? Xmpp.Status;
                    if (OnDataRecieved != null)
                    {
                        OnDataRecieved.Invoke(this, DataRecType.MyInfo, pres);
                    }
                }
                return;
            }
            switch (pres.Type)
            {
            case PresenceType.available:
                if (pres.From.Server == "conference." + Host)
                {
                    var rm = Chatting.GetRoom(new NewUser(pres.From), true);
                    rm.AddUser(new NewUser(pres.MucUser.Item.Jid), false);
                }
                break;

            case PresenceType.unavailable:
            {
                if (pres.From.Server == "conference." + Host)
                {
                    if (pres.MucUser.Item.Jid == null)
                    {
                        break;
                    }
                    if (pres.MucUser.Item.Jid.Bare == Me.User.Bare)
                    {
                        break;
                    }
                    var rm = Chatting.GetRoom(new NewUser(pres.From), true);
                    rm.UserLeft(new NewUser(pres.MucUser.Item.Jid));
                }
                break;
            }

            case PresenceType.subscribe:
                if (!Friends.Contains(new NewUser(pres.From.Bare)))
                {
                    Notifications.Add(new FriendRequestNotification(pres.From.Bare, this, _noteId));
                    _noteId++;
                    if (OnFriendRequest != null)
                    {
                        OnFriendRequest.Invoke(this, pres.From.Bare);
                    }
                }
                else
                {
                    AcceptFriendship(pres.From.Bare);
                }
                break;

            case PresenceType.subscribed:
                break;

            case PresenceType.unsubscribe:
                break;

            case PresenceType.unsubscribed:
                break;

            case PresenceType.error:
                break;

            case PresenceType.probe:
                break;
            }
            for (int i = 0; i < Friends.Count; i++)
            {
                if (Friends[i].User.User == pres.From.User)
                {
                    Friends[i].CustomStatus = pres.Status ?? "";
                    Friends[i].SetStatus(pres);
                    break;
                }
            }
            XmppOnOnRosterEnd(this);
        }