Обзор
Клиенты могут запускаться непосредственно маршрутизатором, если они перечислены в файле clients.config. Эти клиенты могут быть "управляемыми" или "неуправляемыми". Это обрабатывается менеджером ClientAppManager. Кроме того, управляемые или неуправляемые клиенты могут зарегистрироваться в ClientAppManager, чтобы другие клиенты могли получить ссылку на них. Существует также простая функция Port Mapper, позволяющая клиентам регистрировать внутренний порт, который могут искать другие клиенты.
Управляемые клиенты
Начиная с версии 0.9.4, маршрутизатор поддерживает управляемые клиенты. Управляемые клиенты конкретизируются и запускаются ClientAppManager(ом). ClientAppManager поддерживает ссылку на клиента и получает обновления о состоянии клиента. Управляемые клиенты предпочтительнее, так как гораздо проще реализовать отслеживание состояния, запуск и остановку клиента. Также гораздо проще избежать статических ссылок в коде клиента, которые могут привести к чрезмерному использованию памяти после остановки клиента. Управляемые клиенты могут запускаться и останавливаться пользователем в консоли маршрутизатора и прекращаются при выключении маршрутизатора.
Управляемые клиенты реализуют либо интерфейс net.i2p.app.ClientApp, либо net.i2p.router.app.RouterApp. Клиенты, реализующие интерфейс ClientApp, должны предоставить следующий конструктор:
public MyClientApp(I2PAppContext context, ClientAppManager listener, String[] args)
Клиенты, реализующие интерфейс RouterApp, должны предоставить следующий конструктор:
public MyClientApp(RouterContext context, ClientAppManager listener, String[] args)
Предоставляемые аргументы указываются в файле clients.config.
Неуправляемые клиенты
Если основной класс, указанный в файле clients.config, не реализует управляемый интерфейс, он будет запущен с помощью main() с указанными аргументами и остановлен с помощью main() с указанными аргументами. Маршрутизатор не поддерживает ссылки, так как все взаимодействия осуществляются через статический метод main(). Консоль не может предоставить пользователю точную информацию о состоянии.
Зарегистрированные клиенты
Клиенты, как управляемые, так и неуправляемые, могут зарегистрироваться в ClientAppManager, чтобы другие клиенты могли получить ссылку на них. Регистрация осуществляется по имени. Известными зарегистрированными клиентами являются:
console, i2ptunnel, Jetty, outproxy, update
Картограф портов
Маршрутизатор также предоставляет клиентам простой механизм для поиска внутренней службы сокетов, например, HTTP-прокси. Это обеспечивает Картограф портов. Регистрация осуществляется по имени. Клиенты, которые регистрируются, обычно предоставляют внутренний эмулированный сокет на этом порту.