Home | History | Annotate | Download | only in smack

Lines Matching refs:Presence

28 import org.jivesoftware.smack.packet.Presence;
38 * presence updates for. Roster items are categorized into groups for easier management.<p>
64 private Map<String, Map<String, Presence>> presenceMap;
118 presenceMap = new ConcurrentHashMap<String, Map<String, Presence>>();
122 // Listen for any presence packets.
123 PacketFilter presenceFilter = new PacketTypeFilter(Presence.class);
131 // Changes the presence available contacts to unavailable
136 // Changes the presence available contacts to unavailable
164 * listens for Presence packets that have a type of
165 * {@link org.jivesoftware.smack.packet.Presence.Type#subscribe}.
179 * listens for Presence packets that have a type of
180 * {@link org.jivesoftware.smack.packet.Presence.Type#subscribe}.
262 * Creates a new roster entry and presence subscription. The server will asynchronously
306 // Create a presence subscription packet and send.
307 Presence presencePacket = new Presence(Presence.Type.subscribe);
338 // Removing the user from the roster, so remove any presence information
580 * Returns the presence info for a particular user. If the user is offline, or
581 * if no presence data is available (such as when you are not subscribed to the
582 * user's presence updates), unavailable presence will be returned.<p>
584 * If the user has several presences (one for each resource), then the presence with
586 * the one with the "most available" presence mode will be returned. In order,
587 * that's {@link org.jivesoftware.smack.packet.Presence.Mode#chat free to chat},
588 * {@link org.jivesoftware.smack.packet.Presence.Mode#available available},
589 * {@link org.jivesoftware.smack.packet.Presence.Mode#away away},
590 * {@link org.jivesoftware.smack.packet.Presence.Mode#xa extended away}, and
591 * {@link org.jivesoftware.smack.packet.Presence.Mode#dnd do not disturb}.<p>
593 * Note that presence information is received asynchronously. So, just after logging
594 * in to the server, presence values for users in the roster may be unavailable
597 * other user's presence instant by instant. If you need to track presence over time,
604 * @return the user's current presence, or unavailable presence if the user is offline
605 * or if no presence information is available..
607 public Presence getPresence(String user) {
609 Map<String, Presence> userPresences = presenceMap.get(key);
611 Presence presence = new Presence(Presence.Type.unavailable);
612 presence.setFrom(user);
613 return presence;
618 Presence presence = null;
621 Presence p = userPresences.get(resource);
625 // Chose presence with highest priority first.
626 if (presence == null || p.getPriority() > presence.getPriority()) {
627 presence = p;
630 else if (p.getPriority() == presence.getPriority()) {
631 Presence.Mode pMode = p.getMode();
632 // Default to presence mode of available.
634 pMode = Presence.Mode.available;
636 Presence.Mode presenceMode = presence.getMode();
637 // Default to presence mode of available.
639 presenceMode = Presence.Mode.available;
642 presence = p;
646 if (presence == null) {
647 presence = new Presence(Presence.Type.unavailable);
648 presence.setFrom(user);
649 return presence;
652 return presence;
658 * Returns the presence info for a particular user's resource, or unavailable presence
659 * if the user is offline or if no presence information is available, such as
660 * when you are not subscribed to the user's presence updates.
663 * @return the user's current presence, or unavailable presence if the user is offline
664 * or if no presence information is available.
666 public Presence getPresenceResource(String userWithResource) {
669 Map<String, Presence> userPresences = presenceMap.get(key);
671 Presence presence = new Presence(Presence.Type.unavailable);
672 presence.setFrom(userWithResource);
673 return presence;
676 Presence presence = userPresences.get(resource);
677 if (presence == null) {
678 presence = new Presence(Presence.Type.unavailable);
679 presence.setFrom(userWithResource);
680 return presence;
683 return presence;
689 * Returns an iterator (of Presence objects) for all of a user's current presences
690 * or an unavailable presence if the user is unavailable (offline) or if no presence
691 * information is available, such as when you are not subscribed to the user's presence
695 * @return an iterator (of Presence objects) for all the user's current presences,
696 * or an unavailable presence if the user is offline or if no presence information
699 public Iterator<Presence> getPresences(String user) {
701 Map<String, Presence> userPresences = presenceMap.get(key);
703 Presence presence = new Presence(Presence.Type.unavailable);
704 presence.setFrom(user);
705 return Arrays.asList(presence).iterator();
708 Collection<Presence> answer = new ArrayList<Presence>();
709 for (Presence presence : userPresences.values()) {
710 if (presence.isAvailable()) {
711 answer.add(presence);
718 Presence presence = new Presence(Presence.Type.unavailable);
719 presence.setFrom(user);
720 return Arrays.asList(presence).iterator();
757 * Changes the presence of available contacts offline by simulating an unavailable
758 * presence sent from the server. After a disconnection, every Presence is set
762 Presence packetUnavailable;
764 Map<String, Presence> resources = presenceMap.get(user);
767 packetUnavailable = new Presence(Presence.Type.unavailable);
800 * Fires roster presence changed event to roster listeners.
802 * @param presence the presence change.
804 private void fireRosterPresenceEvent(Presence presence) {
806 listener.presenceChanged(presence);
829 * processed by registering a listener for presence packets and then looking
830 * for any presence requests that have the type Presence.Type.SUBSCRIBE or
831 * Presence.Type.UNSUBSCRIBE.
837 * Listens for all presence packets and processes them.
842 Presence presence = (Presence) packet;
843 String from = presence.getFrom();
846 // If an "available" presence, add it to the presence map. Each presence
847 // map will hold for a particular user a map with the presence
849 if (presence.getType() == Presence.Type.available) {
850 Map<String, Presence> userPresences;
851 // Get the user presence map
853 userPresences = new ConcurrentHashMap<String, Presence>();
859 // See if an offline presence was being stored in the map. If so, remove
860 // it since we now have an online presence.
862 // Add the new presence, using the resources as a key.
863 userPresences.put(StringUtils.parseResource(from), presence);
867 fireRosterPresenceEvent(presence);
871 else if (presence.getType() == Presence.Type.unavailable) {
872 // If no resource, this is likely an offline presence as part of
873 // a roster presence flood. In that case, we store it.
875 Map<String, Presence> userPresences;
876 // Get the user presence map
878 userPresences = new ConcurrentHashMap<String, Presence>();
884 userPresences.put("", presence);
886 // Otherwise, this is a normal offline presence.
888 Map<String, Presence> userPresences = presenceMap.get(key);
889 // Store the offline presence, as it may include extra information
891 userPresences.put(StringUtils.parseResource(from), presence);
896 fireRosterPresenceEvent(presence);
899 else if (presence.getType() == Presence.Type.subscribe) {
902 Presence response = new Presence(Presence.Type.subscribed);
903 response.setTo(presence.getFrom());
908 Presence response = new Presence(Presence.Type.unsubscribed);
909 response.setTo(presence.getFrom());
914 else if (presence.getType() == Presence.Type.unsubscribe) {
918 // has unsubscribed to our presence.
919 Presence response = new Presence(Presence.Type.unsubscribed);
920 response.setTo(presence.getFrom());
925 // Error presence packets from a bare JID mean we invalidate all existing
926 // presence info for the user.
927 else if (presence.getType() == Presence.Type.error &&
930 Map<String, Presence> userPresences;
932 userPresences = new ConcurrentHashMap<String, Presence>();
937 // Any other presence data is invalidated by the error packet.
940 // Set the new presence using the empty resource as a key.
941 userPresences.put("", presence);
945 fireRosterPresenceEvent(presence);