It sends direct presence and then listens for 10 minutes for any presence changes.
import tigase.jaxmpp.core.client.BareJID import tigase.jaxmpp.core.client.JID import tigase.jaxmpp.core.client.SessionObject import tigase.jaxmpp.core.client.exceptions.JaxmppException import tigase.jaxmpp.core.client.xmpp.modules.chat.MessageModule import tigase.jaxmpp.core.client.xmpp.modules.presence.PresenceModule import tigase.jaxmpp.core.client.xmpp.stanzas.Presence import tigase.jaxmpp.j2se.Jaxmpp import tigase.jaxmpp.j2se.connectors.socket.SocketConnector final Jaxmpp contact = new Jaxmpp() tigase.jaxmpp.j2se.Presence.initialize(contact); tigase.jaxmpp.j2se.Roster.initialize(contact); contact.getModulesManager().register(new MessageModule()); contact.getProperties().setUserProperty(SessionObject.USER_BARE_JID, BareJID.bareJIDInstance("admin@atlantiscity")) contact.getProperties().setUserProperty(SessionObject.PASSWORD, "admin") contact.getEventBus().addHandler(PresenceModule.ContactChangedPresenceHandler.ContactChangedPresenceEvent.class, new PresenceModule.ContactChangedPresenceHandler() { @Override void onContactChangedPresence(SessionObject sessionObject, Presence stanza, JID jid, Presence.Show show, String status, Integer priority) throws JaxmppException { System.out.println("Presence received:\t" + jid + " is now " + show + " (" + status + ")"); } }); println("Loging in..."); contact.login(true) if (contact.isConnected()) { println("Sending direct presence") def presenceModule = contact.getModulesManager().getModule(PresenceModule.class); presenceModule.sentDirectPresence(JID.jidInstance("tigase2@atlantiscity/Psi+"), Presence.Show.away, "new status", 65); Thread.sleep(1 * 1000) println("Sending direct unavailable presence") presenceModule.sentDirectPresence(JID.jidInstance("tigase2@atlantiscity/Psi+"), Presence.Show.offline, "new status", 65); Thread.sleep(1 * 1000) println("Waiting for the presence for 10 minutes") Thread.sleep(10 * 60 * 1000) contact.disconnect() }