Getting Started With Smack

This document will introduce you to the Smack API and provide an overview of important classes and concepts.

Requirements

The only requirement for Smack is JDK 1.2 or later. An XML parser is embedded in the smack.jar file and no other third party libraries are required.

Establishing a Connection

The `XMPPConnection` class is used to create a connection to an XMPP server. To create an SSL connection, use the SSLXMPPConnection class. Below are code examples for making a connection:

    // Create a connection to the jabber.org server.
    XMPPConnection conn1 = new XMPPConnection("jabber.org");

    // Create a connection to the jabber.org server on a specific port.
    XMPPConnection conn2 = new XMPPConnection("jabber.org", 5222);

    // Create an SSL connection to jabber.org.
    XMPPConnection connection = new SSLXMPPConnection("jabber.org");

Once you've created a connection, you should login using a username and password with the `XMPPConnection.login(String username, String password)` method. Once you've logged in, you can being chatting with other users by creating new `Chat` or `GroupChat` objects.

Working with the Roster

CONTENT COMING SOON

Packets -- Reading and Writing

Each message to the XMPP server from a client is called a packet and is sent as XML. The `org.jivesoftware.smack.packet` package contains classes that encapsulate the different packet types allowed by XMPP (message, presence, and IQ). Classes such as `Chat` and `GroupChat` provide higher-level constructs that manage creating and sending packets automatically, but you can also create and send packets directly. Below is a code example for changing our presence to let people know we're unavailable because we're "out fishing":

    // Create a new presence. Pass in false to indicate we're unavailable.
    Presence presence = new Presence(Presence.Type.UNAVAILABLE);
    presence.setStatus("Gone fishing");
    // Send the packet (assume we have a XMPPConnection instance called "con").
    con.sendPacket(presence);

Smack provides two ways to read incoming packets: `PacketListener`, and `PacketCollector`. Both use `PacketFilter` instances to determine which packets should be processed. A packet listener is used for event style programming, while a packet collector has a result queue of packets that you can do polling and blocking operations on. So, a packet listener is useful when you want to take some action whenever a packet happens to come in, while a packet collector is useful when you want to wait for a specific packet to come through. Packet collectors and listeners can be created using the connection object.