Move info on the ClientAppManager to a new page,

expand on it, add PortMapper info (ticket #1185)
This commit is contained in:
zzz
2014-02-11 15:23:18 +00:00
parent e69c63cf08
commit 71fad77a3a
3 changed files with 77 additions and 29 deletions

View File

@ -0,0 +1,76 @@
{% 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 %}

View File

@ -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/plugins') }}">{{ _('Plugins Overview') }}</a></li>
<li><a href="{{ site_url('docs/spec/plugin') }}">{{ _('Plugin Specification') }}</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/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/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/api/i2pcontrol') }}">{{ _('I2PControl Plugin API') }}</a></li>
<li><a href="{{ site_url('docs/spec/blockfile') }}">{{ _('hostsdb.blockfile Format') }}</a></li> <li><a href="{{ site_url('docs/spec/blockfile') }}">{{ _('hostsdb.blockfile Format') }}</a></li>

View File

@ -103,35 +103,6 @@ to the console.
Clients may be "managed" or "unmanaged". Clients may be "managed" or "unmanaged".
</p> </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> <h3>{% trans %}Logger{% endtrans %} (logger.config)</h3>
<p>{% trans -%} <p>{% trans -%}