# Module Netplex_kit

    module Netplex_kit: sig .. end

Netplex toolkit

    class type virtual v_processor = object .. end

Same as `processor`, but the methods `process` and `supported_ptypes` are flagged as `virtual`

    class empty_processor_hooks : unit -> Netplex_types.processor_hooks

This is an empty set of processor hooks, i.e.

    class processor_hooks_delegation : Netplex_types.processor_hooks -> Netplex_types.processor_hooks

Takes a hooks object, and makes a class of it.

    class virtual processor_base : Netplex_types.processor_hooks -> v_processor

A virtual (incomplete) base class for processors.

    class protocol_switch_processor : (string * Netplex_types.processor) list -> Netplex_types.processor

The arg is a list of pairs `(proto_name, proto_proc)`.

    class protocol_switch_factory : string -> (string * Netplex_types.processor_factory) list -> Netplex_types.processor_factory

`protocol_switch_factory name merge_list`: Merges the factories in `merge_list` to a single factory.

    val add_helper_service : Netplex_types.controller -> string -> Netplex_types.processor_hooks -> unit

`add_helper_service ctrl name hooks`: Adds a helper service `name` to the controller `ctrl`. The helper service does not have any externally accessible socket, but starts a single regular container that looks like any other container. Whatever needs to be initialized must be done in the `pre_start_hook` or the `post_start_hook`.

This function must be called in controller context, for example in the `late_initializer` of `Netplex_main.startup`, but it can also be started later.

For an example, look at `examples/netplex/helper_container.ml` in the distributed source tarball.

For multi-threaded programs, `Netplex_cenv.run_in_controller_context` is the required companion function to start helper threads at any time. Multi-processing programs do not have such an easy way to add helpers. They should it at program startup time.

Known bug. The the helper component will be in "starting" state as long as the `post_start_hook` runs.

    val create_protocol : ?lstn_backlog:int ->
           ?lstn_reuseaddr:bool ->
           ?so_keepalive:bool ->
           ?tcp_nodelay:bool ->
           ?configure_slave_socket:(Unix.file_descr -> unit) ->
           string -> Netplex_types.extended_address array -> Netplex_types.protocol

`create_protocol name addresses`: Creates a `protocol` object from the passed arguments

    val create_socket_service_config : ?startup_timeout:float ->
           ?change_user_to:int * int ->
           ?gc_when_idle:bool ->
           ?conn_limit:int ->
           string ->
           Netplex_types.protocol list ->
           Netplex_types.controller_config -> Netplex_types.socket_service_config

`create_socket_service_config name protos ctrl_conf`: Creates a `socket_service_config` object from the passed arguments