This is list of interfaces to look at when you work on a new component:

  1. tigase.server.ServerComponent - this is the very basic interface for component. All components must implement it.
  2. tigase.server.MessageReceiver - this interface extends ServerComponent and is required to implement by components which want to receive data packets like session manager, c2s connection manager and so on…​
  3. tigase.conf.Configurable - implementing this interface is required to make it configurable. For each object of this type configuration is pushed to it at any time at runtime. This is necessary to make it possible to change configuration at runtime. Implementation should be careful enough to handle this properly.
  4. tigase.disco.XMPPService - Objects of which inherit this interface can respond to "ServiceDiscovery" requests.
  5. tigase.stats.StatisticsContainer - Objects which inherits this type can return runtime statistics. Any object can collect job statistics and implementing this interface guarantees that statistics will be presented in consisted way to user who wants to see them.

Instead of implementing above interfaces directly I would recommend to extend one of existing abstract classes which take care of the most of "dirty and boring" stuff. Here is a list the most useful abstract classes:

  • tigase.server.AbstractMessageReceiver - implements 4 basic interfaces:

    ServerComponent, MessageReceiver, Configurable and StatisticsContainer. It also manages internal data queues using own threads which prevents from dead-locks. It offers even-driven data processing which means whenever packet arrives abstract void processPacket(Packet packet); method is called to process it. You have to implement this abstract method in your component. If your component wants to send a packet (in response to data it received for example) it needs to call

    boolean addOutPacket(Packet packet)

    method. This is it, I mean basic implementation.

  • tigase.server.ConnectionManager - this is an extension of AbstractMessageReceiver abstract class. As its name says this class takes care of all network connection management stuff. If your component needs to send and receive data directly from the network (like c2s connection, s2s connection or external component) you should use this implementation as a basic class. It takes care of all things related to networking, I/O, reconnecting, listening on socket, connecting and so on. If you extend this class you have to expect data coming from to sources: from the MessageRouter and this is when

    abstract void processPacket(Packet packet);

    method is called and from network connection and then

    abstract Queue processSocketData(XMPPIOService serv);

    method is called.