I2P Address: [http://git.idk.i2p]

Skip to content
Snippets Groups Projects
Commit 71fad77a authored by zzz's avatar zzz
Browse files

Move info on the ClientAppManager to a new page,

expand on it, add PortMapper info (ticket #1185)
parent e69c63cf
No related branches found
No related tags found
No related merge requests found
{% extends "global/layout.html" %}
{% block title %}{% trans %}Managed Clients{% endtrans %}{% endblock %}
{% block lastupdated %}{% trans %}February 2014{% endtrans %}{% endblock %}
{% block accuratefor %}0.9.11{% endblock %}
{% block content %}
<h2>{% trans %}Overview{% endtrans %}</h2>
<p>{% trans configspec=site_url('docs/spec/configuration') -%}
Clients may be started directly by the router when they are listed
in the <a href="{{ configspec }}">clients.config</a> file.
These clients may be "managed" or "unmanaged".
This is handled by the ClientAppManager.
Additionally, managed or unmanaged clients may register with the
ClientAppManager so that other clients may retrieve a reference to them.
There is also a simple Port Mapper facility for clients to register an
internal port that other clients may look up.
{%- endtrans %}</p>
<h2>{% trans %}Managed Clients{% endtrans %}</h2>
<p>{% trans -%}
As of release 0.9.4, the router supports managed clients.
Managed clients are instantiated and started by the ClientAppManager.
The ClientAppManager maintains a reference to the client and receives updates on the client's state.
Managed clients are preferred, as it is much easier to implement state tracking
and to start and stop a client. It also is much easier to avoid static references in the client code
which could lead to excessive memory usage after a client is stopped.
Managed clients may be started and stopped by the user in the router console,
and are stopped at router shutdown.
{%- endtrans %}</p>
<p>{% trans -%}
Managed clients implement either the net.i2p.app.ClientApp or net.i2p.router.app.RouterApp interface.
Clients implementing the ClientApp interface must provide the following constructor:
{%- endtrans %}</p>
<pre>
public MyClientApp(I2PAppContext context, ClientAppManager listener, String[] args)
</pre>
<p>{% trans -%}
Clients implementing the RouterApp interface must provide the following constructor:
{%- endtrans %}</p>
<pre>
public MyClientApp(RouterContext context, ClientAppManager listener, String[] args)
</pre>
<p>{% trans -%}
The arguments provided are specified in the clients.config file.
{%- endtrans %}</p>
<h2>{% trans %}Unmanaged Clients{% endtrans %}</h2>
<p>{% trans -%}
If the main class specified in the clients.config file does not implement a managed interface,
it will be started with main() with the arguments specified,
and stopped with main() with the arguments specified.
The router does not maintain a reference, since all interactions are via the static main() method.
The console cannot provide accurate state information to the user.
{%- endtrans %}</p>
<h2>{% trans %}Registered Clients{% endtrans %}</h2>
<p>{% trans -%}
Clients, whether managed or unmanaged, may register with the ClientAppManager
so that other clients may retrieve a reference to them.
Registration is by name.
Known registered clients are:
{%- endtrans %}</p>
<pre>
console, i2ptunnel, Jetty, outproxy, update
</pre>
<h2>{% trans %}Port Mapper{% endtrans %}</h2>
<p>{% trans -%}
The router also provides a simple mechanism for clients to find an internal socket service,
such as the HTTP proxy. This is provided by the Port Mapper.
Registration is by name.
Clients that register generally provide an internal emulated socket on that port.
{%- endtrans %}</p>
{% endblock %}
......@@ -41,6 +41,7 @@ If you find any inaccuracies in the documents linked below, please
<li><a href="{{ site_url('docs/plugins') }}">{{ _('Plugins Overview') }}</a></li>
<li><a href="{{ site_url('docs/spec/plugin') }}">{{ _('Plugin Specification') }}</a></li>
<li><a href="{{ site_url('docs/spec/updates') }}">{{ _('Router software updates') }}</a></li>
<li><a href="{{ site_url('docs/applications/managed-clients') }}">{{ _('Managed Clients') }}</a></li>
<li><a href="{{ site_url('docs/applications/bittorrent') }}">{{ _('Bittorrent over I2P') }}</a></li>
<li><a href="{{ site_url('docs/api/i2pcontrol') }}">{{ _('I2PControl Plugin API') }}</a></li>
<li><a href="{{ site_url('docs/spec/blockfile') }}">{{ _('hostsdb.blockfile Format') }}</a></li>
......
......@@ -103,35 +103,6 @@ to the console.
Clients may be "managed" or "unmanaged".
</p>
<h4>Managed Clients</h4>
<p>
As of release 0.9.4, the router supports "managed" clients.
Managed clients are instantiated and started by the <code>ClientAppManager</code>.
The ClientAppManager maintains a reference to the client and receives updates on the client's state.
Managed clients are preferred, as it is much easier to implement state tracking
and to start and stop a client. It also is much easier to avoid static references in the client code
which could lead to excessive memory usage after a client is stopped.
</p>
<p>
Managed clients implement either the <code>net.i2p.app.ClientApp</code> or
<code>net.i2p.router.app.RouterApp</code> interface.
Clients implementing the ClientApp interface MUST provide the following constructor:
<pre>
public MyClientApp(I2PAppContext context, ClientAppManager listener, String[] args)
</pre>
Clients implementing the RouterApp interface MUST provide the following constructor:
<pre>
public MyClientApp(RouterContext context, ClientAppManager listener, String[] args)
</pre>
The args will be the arguments specified in the clients.config file.
</p>
<h4>Unmanaged Clients</h4>
<p>
If the main class does not implement a managed interface,
it will be started with main() with the arguments specified,
and stopped with main() with the arguments specified.
</p>
<h3>{% trans %}Logger{% endtrans %} (logger.config)</h3>
<p>{% trans -%}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment