package net.i2p.app;
/**
* Notify the router of events, and provide methods for
* client apps to find each other.
*
* @since 0.9.4
*/
public interface ClientAppManager {
/**
* Must be called on all state transitions except
* from UNINITIALIZED to INITIALIZED.
*
* @param app non-null
* @param state non-null
* @param message may be null
* @param e may be null
*/
public void notify(ClientApp app, ClientAppState state, String message, Exception e);
/**
* Register with the manager under the given name,
* so that other clients may find it.
* Only required for apps used by other apps.
*
* @param app non-null
* @return true if successful, false if duplicate name
*/
public boolean register(ClientApp app);
/**
* Unregister with the manager. Name must be the same as that from register().
* Only required for apps used by other apps.
*
* @param app non-null
*/
public void unregister(ClientApp app);
/**
* Get a registered app.
* Only used for apps finding other apps.
*
* @param name non-null
* @return client app or null
*/
public ClientApp getRegisteredApp(String name);
}