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; } }
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); }