Overview

This section of the User Guide will introduce you to developing a BRAHMS Process. There is a section for each language that is currently available, other than 1266 (there's no such thing as a Quick Start with the 1266 bindings - use 1199 instead). You can choose any of these - if you do more than one, you will find that they only differ in the modifications you have to make to your process source file.

Process Behaviour

The behaviour of a simple Process is straightforward; it must perform the following basic steps.

  • Set State (read its parameters, initialise its private state).
  • Connect (accept inputs and create outputs).
  • Execute (step through time, computing its operations).

The framework will fire many Events on a Process during its Life Cycle but, to begin with, most Processes will only need to respond to three. These events correspond directly with the basic steps in the behaviour listed above.

Set State

During initialisation, EVENT_STATE_SET will be received once. The Process will be presented with its parameters, which it should read. In addition, the Process may need to initialise further states (buffers, queues, accumulators, etc.).

Connect

During connection, EVENT_INIT_CONNECT will be called one or more times. On each call, the Process should create as many outputs as possible. Many processes will be able to create all of their outputs on the first call to this event. See the reference information for EVENT_INIT_CONNECT for full details, but the individual language Quick Start sections discuss this behaviour in more detail as well.

Execute

During execution, EVENT_RUN_SERVICE will be called multiple times. On each call, the Process should step through time, bringing its state up to date with the timestamp passed to it by the framework.

Termination

Many processes will not need to do any termination, but those that acquire private resources might. This should be done in response to EVENT_MODULE_DESTROY, which manifests in different ways in the different language bindings. In the C++ binding, for instance, the Process class destructor is called during this event, so the Process should free resources here.