# Class type Netplex_types.container

    class type container = object .. end

Containers encapsulate the control flow of the service components. A container is run in a separate thread or process.

Thread safety: All methods except `start` can be called from any thread, and provide full thread safety.

    method socket_service_name : string

    method socket_service : socket_service

    method container_id : container_id

Return the container ID

    method ptype : parallelization_type

The parallelization type actually used for this container

    method event_system : Unixqueue.unix_event_system

The event system the container uses

    method start : Unix.file_descr -> Unix.file_descr -> unit

Internal Method. Called by the controller to start the container. It is the responsibility of the container to call the `post_start_hook` and the `pre_finish_hook`.

The file descriptors are endpoints of RPC connections to the controller. The first serves calls of the `Control` program, and the second serves calls of the `System` program.

When `start` returns the container will be terminated.

    method shutdown : unit -> unit

Initiates a shutdown of the container.

    method n_connections : int

The current number of connections

    method n_total : int

The sum of all connections so far

    method system : Rpc_client.t

An RPC client that can be used to send messages to the controller. Only available while `start` is running. It is bound to `System.V1`.

In multi-threaded programs access to `system` must be governed by `system_monitor`. See `Uq_mt` for details what this means.

    method system_monitor : Uq_mt.monitor

The thread monitor protecting the `system` RPC client

    method lookup : string -> string -> string option

`lookup service_name protocol_name` tries to find a Unix domain socket for the service and returns it.

    method lookup_container_sockets : string -> string -> string array

`lookup_container_sockets service_name protocol_name`: returns the Unix Domain paths of all container sockets for this service and protocol. These are the sockets declared with address type "container" in the config file.

    method owned_container_sockets : (string * string) list

List of pairs `(protocol_name, path)` of all container sockets of this container

    method send_message : string -> string -> string array -> unit

`send_message service_pattern msg_name msg_arguments`: Sends a message to all services and message receivers matching `service_pattern`. The pattern may include the wildcard `*`.

See the `Netplex_types.controller.send_message` method for the notification guarantees.

    method log : level -> string -> unit

Sends a log message to the controller.

    method log_subch : string -> level -> string -> unit

Sends a log message to the controller. The first string is the subchannel

    method update_detail : Unix.file_descr -> string -> unit

Update the detail string output for the `netplex.connections` admin message

    method var : string -> param_value_or_any

Returns the value of a container variable or `Not_found`. Container variables can be used by the user of a container to store additional values in the container. These values exist once per thread/process.

    method set_var : string -> param_value_or_any -> unit

Sets the value of a container variable

    method call_plugin : plugin -> string -> Netxdr.xdr_value -> Netxdr.xdr_value

`call_plugin p procname procarg`: This method can be called from the container context to invoke the plugin `p` procedure `procname`. This means that the `ctrl_receive_call` of the same plugin is invoked in the controller context.

    method activate_lever : int -> encap -> encap

Runs a lever function registered in the controller. The `int` argument identifies the lever. The `encap` argument is the parameter, and the returned exception is the result. See also `Netplex_cenv.Make_lever` for a convenient way to create and use levers.

    method startup_directory : string

The current directory at Netplex startup time (same view as controller)