package net.i2p.app;
import java.util.concurrent.ConcurrentHashMap;
import net.i2p.I2PAppContext;
/**
* A simple ClientAppManager that supports register/unregister only,
* so that client apps may find each other in AppContext.
* See RouterAppManager for the real thing in RouterContext.
*
* @since 0.9.30
*/
public class ClientAppManagerImpl implements ClientAppManager {
// registered name to client
protected final ConcurrentHashMap<String, ClientApp> _registered;
public ClientAppManagerImpl(I2PAppContext ctx) {
_registered = new ConcurrentHashMap<String, ClientApp>(8);
}
/**
* Does nothing.
*
* @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) {
return _registered.putIfAbsent(app.getName(), app) == null;
}
/**
* 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) {
_registered.remove(app.getName(), app);
}
/**
* Get a registered app.
* Only used for apps finding other apps.
* Do not hold a static reference.
* If you only need to find a port, use the PortMapper instead.
*
* @param name non-null
* @return client app or null
*/
public ClientApp getRegisteredApp(String name) {
return _registered.get(name);
}
}