openOBD function hosting
To host your own openOBD functions on the Jifeline network you will need to create an application that communicates with the so-called Function Broker (broker). This is the application that acts as an intermediary for all openOBD functions. Setting up your application can be done by using the openOBD library. The openOBD library contains the endpoints that are needed to set up the communication between your functions and the function broker via gRPC.
Example design
We will use the openOBD functions setup that is used by Jifeline Networks (JNW) as an example. The basic overview of the JNW openOBD function setup is shown in the following schematics:

In the image above it can be seen that there are two application JNW uses to host their openOBD functions: the Function Launcher (launcher) and Function Executor (executor).
In this example the launcher is the application that directly communicates with the broker. The launcher registers the openOBD functions JNW offers with the broker and executes openOBD function requests from the broker by passing them through to the corresponding executor. There can possibly be more than one executor.
The executor is responsible for the actual runtime of the openOBD functions. It contains the code for specific functions and executes this every time the launcher requests a certain function. There can be multiple executors written in different programming languages (although currently there is only a Python one) that can execute different openOBD functions, the launcher knows which function is handled by which executor. Each executed openOBD function will result in log output that will be captured and saved to a remote location (an AWS S3 bucket in JNW's case).
The launcher executes openOBD functions on the executor by calling the corresponding API endpoint, with the necessary information (like the openOBD Session)
Example code
There is an example openOBD setup available on this GitHub page. This consists of the setup JNW uses to host their functions (so a launcher and an executor), and a way to run this setup locally.
To be able to run these applications you need to have registered at least one openOBD function. After which you can configure the launcher to register this function with the broker. Refer to the code example for more information on configuring the launcher. Information on how to generate a function ID, which is required for registering a function, can be found here.
Create your own openOBD function
The example above will set you up to host your own openOBD functions, but does not contain any real function implementations. Feel free to use the example given above as a base to create your own openOBD setup, or create your own custom environment!