Search in sources :

Example 31 with Presence

use of org.jivesoftware.smack.packet.Presence in project Smack by igniterealtime.

the class MessageTest method testDirectPresence.

/**
     * Will a user recieve a message from another after only sending the user a directed presence,
     * or will Wildfire intercept for offline storage?
     *
     * User1 becomes lines. User0 never sent an available presence to the server but
     * instead sent one to User1. User1 sends a message to User0. Should User0 get the
     * message?
     */
public void testDirectPresence() {
    getConnection(1).sendStanza(new Presence(Presence.Type.available));
    Presence presence = new Presence(Presence.Type.available);
    presence.setTo(getBareJID(1));
    getConnection(0).sendStanza(presence);
    StanzaCollector collector = getConnection(0).createStanzaCollector(new MessageTypeFilter(Message.Type.chat));
    try {
        getConnection(1).getChatManager().createChat(getBareJID(0), null).sendMessage("Test 1");
    } catch (XMPPException e) {
        e.printStackTrace();
        fail(e.getMessage());
    }
    Message message = (Message) collector.nextResult(2500);
    assertNotNull("Message not recieved from remote user", message);
}
Also used : MessageTypeFilter(org.jivesoftware.smack.filter.MessageTypeFilter) Message(org.jivesoftware.smack.packet.Message) Presence(org.jivesoftware.smack.packet.Presence)

Example 32 with Presence

use of org.jivesoftware.smack.packet.Presence in project Smack by igniterealtime.

the class MessageTest method testMostRecentActive.

/**
     * User0 is connected from 2 resources. User0 is available in both resources
     * with same priority presence values and same show values. User1 sends a message to the
     * bare JID of User0. Check that the resource with most recent activity will get
     * the messages.
     *
     * @throws Exception if an error occurs.
     */
public void testMostRecentActive() throws Exception {
    // Create another connection for the same user of connection 1
    ConnectionConfiguration connectionConfiguration = new ConnectionConfiguration(getHost(), getPort(), getXMPPServiceDomain());
    XMPPTCPConnection conn3 = new XMPPConnection(connectionConfiguration);
    conn3.connect();
    conn3.login(getUsername(0), getPassword(0), "Home");
    // Set this connection as highest priority
    Presence presence = new Presence(Presence.Type.available);
    presence.setMode(Presence.Mode.available);
    presence.setPriority(10);
    conn3.sendStanza(presence);
    // Set this connection as highest priority
    presence = new Presence(Presence.Type.available);
    presence.setMode(Presence.Mode.available);
    presence.setPriority(10);
    getConnection(0).sendStanza(presence);
    connectionConfiguration = new ConnectionConfiguration(getHost(), getPort(), getXMPPServiceDomain());
    XMPPTCPConnection conn4 = new XMPPConnection(connectionConfiguration);
    conn4.connect();
    conn4.login(getUsername(0), getPassword(0), "Home2");
    presence = new Presence(Presence.Type.available);
    presence.setMode(Presence.Mode.available);
    presence.setPriority(4);
    getConnection(0).sendStanza(presence);
    // Let the server process the change in presences
    Thread.sleep(200);
    // User0 listen in both connected clients
    StanzaCollector collector = getConnection(0).createStanzaCollector(new MessageTypeFilter(Message.Type.chat));
    StanzaCollector coll3 = conn3.createStanzaCollector(new MessageTypeFilter(Message.Type.chat));
    StanzaCollector coll4 = conn4.createStanzaCollector(new MessageTypeFilter(Message.Type.chat));
    // Send a message from this resource to indicate most recent activity 
    conn3.sendStanza(new Message("admin@" + getXMPPServiceDomain()));
    // User1 sends a message to the bare JID of User0
    Chat chat = getConnection(1).getChatManager().createChat(getBareJID(0), null);
    chat.sendMessage("Test 1");
    chat.sendMessage("Test 2");
    // Check that messages were sent to resource with highest priority
    Message message = (Message) collector.nextResult(2000);
    assertNull("Resource with oldest activity got the message", message);
    message = (Message) coll4.nextResult(2000);
    assertNull(message);
    message = (Message) coll3.nextResult(2000);
    assertNotNull(message);
    assertEquals("Test 1", message.getBody());
    message = (Message) coll3.nextResult(1000);
    assertNotNull(message);
    assertEquals("Test 2", message.getBody());
    conn3.disconnect();
    conn4.disconnect();
}
Also used : MessageTypeFilter(org.jivesoftware.smack.filter.MessageTypeFilter) Message(org.jivesoftware.smack.packet.Message) Presence(org.jivesoftware.smack.packet.Presence)

Example 33 with Presence

use of org.jivesoftware.smack.packet.Presence in project Smack by igniterealtime.

the class PresenceTest method testOfflineStatusPresence.

/**
     * User1 logs in, then sets offline presence information (presence with status text). User2
     * logs in and checks to see if offline presence is returned.
     *
     * @throws Exception if an exception occurs.
     */
public void testOfflineStatusPresence() throws Exception {
    // Add a new roster entry for other user.
    Roster roster = getConnection(0).getRoster();
    roster.createEntry(getBareJID(1), "gato1", null);
    // Wait up to 2 seconds
    long initial = System.currentTimeMillis();
    while (System.currentTimeMillis() - initial < 2000 && (roster.getPresence(getBareJID(1)).getType().equals(Presence.Type.unavailable))) {
        Thread.sleep(100);
    }
    // Sign out of conn1 with status
    Presence offlinePresence = new Presence(Presence.Type.unavailable);
    offlinePresence.setStatus("Offline test");
    getConnection(1).disconnect(offlinePresence);
    // Wait 500 ms
    Thread.sleep(500);
    Presence presence = getConnection(0).getRoster().getPresence(getBareJID(1));
    assertEquals("Offline presence status not received.", "Offline test", presence.getStatus());
    // Sign out of conn0.
    getConnection(0).disconnect();
    // See if conneciton 0 can get offline status.
    XMPPTCPConnection con0 = getConnection(0);
    con0.connect();
    con0.login(getUsername(0), getUsername(0));
    // Wait 500 ms
    Thread.sleep(500);
    presence = con0.getRoster().getPresence(getBareJID(1));
    assertTrue("Offline presence status not received after logout.", "Offline test".equals(presence.getStatus()));
}
Also used : Presence(org.jivesoftware.smack.packet.Presence)

Example 34 with Presence

use of org.jivesoftware.smack.packet.Presence in project Smack by igniterealtime.

the class PresenceTest method testMultipleResources.

/**
     * User1 is connected from 2 resources. User1 adds User0 to his roster. Ensure
     * that presences are correctly retrieved for User1. User1 logs off from one resource
     * and ensure that presences are still correct for User1.
     */
public void testMultipleResources() throws Exception {
    // Create another connection for the same user of connection 1
    ConnectionConfiguration connectionConfiguration = new ConnectionConfiguration(getHost(), getPort(), getXMPPServiceDomain());
    XMPPTCPConnection conn4 = new XMPPConnection(connectionConfiguration);
    conn4.connect();
    conn4.login(getUsername(1), getPassword(1), "Home");
    // Add a new roster entry
    Roster roster = getConnection(0).getRoster();
    roster.createEntry(getBareJID(1), "gato1", null);
    // Wait up to 2 seconds
    long initial = System.currentTimeMillis();
    while (System.currentTimeMillis() - initial < 2000 && (!roster.getPresence(getBareJID(1)).isAvailable())) {
        Thread.sleep(100);
    }
    // Check that a presence is returned for the new contact
    Presence presence = roster.getPresence(getBareJID(1));
    assertTrue("Returned an offline Presence for an existing user", presence.isAvailable());
    presence = roster.getPresenceResource(getBareJID(1) + "/Home");
    assertTrue("Returned an offline Presence for Home resource", presence.isAvailable());
    presence = roster.getPresenceResource(getFullJID(1));
    assertTrue("Returned an offline Presence for Smack resource", presence.isAvailable());
    Iterator<Presence> presences = roster.getPresences(getBareJID(1));
    assertTrue("Returned an offline Presence for an existing user", presence.isAvailable());
    assertNotNull("No presence was found for user1", presences);
    assertTrue("No presence was found for user1", presences.hasNext());
    presences.next();
    assertTrue("Only one presence was found for user1", presences.hasNext());
    // User1 logs out from one resource
    conn4.disconnect();
    // Wait up to 1 second
    Thread.sleep(700);
    // Check that a presence is returned for the new contact
    presence = roster.getPresence(getBareJID(1));
    assertTrue("Returned a null Presence for an existing user", presence.isAvailable());
    presence = roster.getPresenceResource(getFullJID(1));
    assertTrue("Returned a null Presence for Smack resource", presence.isAvailable());
    presence = roster.getPresenceResource(getBareJID(1) + "/Home");
    assertTrue("Returned a Presence for no longer connected resource", !presence.isAvailable());
    presences = roster.getPresences(getBareJID(1));
    assertNotNull("No presence was found for user1", presences);
    Presence value = presences.next();
    assertTrue("No presence was found for user1", value.isAvailable());
    assertFalse("More than one presence was found for user1", presences.hasNext());
}
Also used : Presence(org.jivesoftware.smack.packet.Presence)

Example 35 with Presence

use of org.jivesoftware.smack.packet.Presence in project Smack by igniterealtime.

the class PresenceTest method testNotAvailablePresence.

/**
     * User1 logs from 2 resources but only one is available. User0 sends a message
     * to the full JID of the unavailable resource. User1 in the not available resource
     * should receive the message.
     * TODO Fix this in Wildfire but before check if XMPP spec requests this feature
     */
public void testNotAvailablePresence() throws XMPPException {
    // Change the presence to unavailable of User_1
    getConnection(1).sendStanza(new Presence(Presence.Type.unavailable));
    // User_1 will log in again using another resource (that is going to be available)
    XMPPTCPConnection conn = createConnection();
    conn.connect();
    conn.login(getUsername(1), getPassword(1), "OtherPlace");
    // Create chats between participants
    Chat chat0 = getConnection(0).getChatManager().createChat(getFullJID(1), null);
    Chat chat1 = getConnection(1).getChatManager().createChat(getBareJID(0), chat0.getThreadID(), null);
    // Test delivery of message to the presence with highest priority
    chat0.sendMessage("Hello");
    /*assertNotNull("Not available connection didn't receive message sent to full JID",
                chat1.nextMessage(2000));
        assertNull("Not available connection received an unknown message",
                chat1.nextMessage(1000));*/
    conn.disconnect();
}
Also used : Presence(org.jivesoftware.smack.packet.Presence)

Aggregations

Presence (org.jivesoftware.smack.packet.Presence)103 Message (org.jivesoftware.smack.packet.Message)21 Resourcepart (org.jxmpp.jid.parts.Resourcepart)12 Jid (org.jxmpp.jid.Jid)11 MessageTypeFilter (org.jivesoftware.smack.filter.MessageTypeFilter)10 AccountItem (com.xabber.android.data.account.AccountItem)9 UserJid (com.xabber.android.data.entity.UserJid)9 AccountJid (com.xabber.android.data.entity.AccountJid)7 StanzaCollector (org.jivesoftware.smack.StanzaCollector)7 AndFilter (org.jivesoftware.smack.filter.AndFilter)7 UserPresence (jetbrains.communicator.core.users.UserPresence)6 MUCUser (org.jivesoftware.smackx.muc.packet.MUCUser)6 BareJid (org.jxmpp.jid.BareJid)6 ClientInfo (com.xabber.android.data.extension.capability.ClientInfo)5 ArrayList (java.util.ArrayList)5 Date (java.util.Date)5 StanzaTypeFilter (org.jivesoftware.smack.filter.StanzaTypeFilter)5 MUCInitialPresence (org.jivesoftware.smackx.muc.packet.MUCInitialPresence)5 Test (org.junit.Test)5 EntityFullJid (org.jxmpp.jid.EntityFullJid)5