RPC C API
The RPC API provides client/server based RPC functionality. It consists of RPC clients and RPC servers and a method to discover remote RPC servers.
RPC Clients
-
SilKit_ReturnCode SilKit_RpcClient_Create(SilKit_RpcClient **outClient, SilKit_Participant *participant, const char *controllerName, SilKit_RpcSpec *rpcSpec, void *resultHandlerContext, SilKit_RpcCallResultHandler_t resultHandler)
Create a RPC client on a simulation participant with the provided properties.
- Parameters
outClient – Pointer to which the resulting RPC client reference will be written.
participant – The simulation participant for which the RPC client should be created.
controllerName – The name of this controller (UTF-8).
rpcSpec – The specification of function name, media type and labels.
resultHandlerContext – A user provided context that is reobtained on call result in the resultHandler.
resultHandler – A callback that is called when a call result is received.
-
SilKit_ReturnCode SilKit_RpcClient_Call(SilKit_RpcClient *self, const SilKit_ByteVector *argumentData, void *userContext)
Dispatch a call to one or multiple corresponding RPC servers.
- Parameters
self – The RPC client that should trigger the remote procedure call.
argumentData – The data that should be transmitted to the RPC server for this call.
userContext – A user provided context pointer that is passed to the result handler when a result is received.
-
SilKit_ReturnCode SilKit_RpcClient_CallWithTimeout(SilKit_RpcClient *self, const SilKit_ByteVector *argumentData, SilKit_NanosecondsTime timeout, void *userContext)
Initiate a remote procedure call with a specified timeout.
In a synchronized execution, simulation time is used for the timeout, in a unsynchronized execution, system time is used for the timeout.
- Parameters
self – The RPC client that should trigger the remote procedure call.
argumentData – A non-owning reference to an opaque block of raw data
timeout – A duration in nanoseconds after which the call runs into a timeout and the CallResultHandler is called with status timeout. After the timeout occurred, no further call result events will be triggered for this call.
userContext – An optional user provided pointer that is reobtained when receiving the call result.
An RpcClient
is created with a handler for the call return by RPC servers:
.. doxygentypedef:: SilKit_CallResultHandler_t
RPC Servers
-
SilKit_ReturnCode SilKit_RpcServer_Create(SilKit_RpcServer **outServer, SilKit_Participant *participant, const char *controllerName, SilKit_RpcSpec *rpcSpec, void *callHandlerContext, SilKit_RpcCallHandler_t callHandler)
Create a RPC server on a simulation participant with the provided properties.
- Parameters
outServer – Pointer to which the resulting RPC server reference will be written.
participant – The simulation participant for which the RPC server should be created.
controllerName – The name of this controller (UTF-8).
rpcSpec – A struct containing all matching related information
callHandlerContext – A user provided context pointer that is passed to the callHandler on call.
callHandler – A callback function that is triggered on invocation of the server functionality.
-
SilKit_ReturnCode SilKit_RpcServer_SubmitResult(SilKit_RpcServer *self, SilKit_RpcCallHandle *callHandle, const SilKit_ByteVector *returnData)
Submit a result for an earlier obtained call handle to an RPC client.
- Parameters
self – The RPC server that should submit the result of the remote procedure call.
callHandle – The call handle that was obtained earlier through an SilKit_RpcCallResultHandler_t.
returnData – The data that should be returned to the calling client.
An RpcServer
is created with a handler to process incoming calls by RPC clients:
-
typedef void (*SilKit_RpcCallHandler_t)(void *context, SilKit_RpcServer *server, const SilKit_RpcCallEvent *event)
A callback function that is called on a RPC server triggered by client.
- Param context
The user provided context pointer that was provided when this handler was registered.
- Param server
The RPC server that received the call.
- Param event
The event contains information about the call by the client.
Data Structures
-
typedef struct SilKit_RpcCallHandle SilKit_RpcCallHandle
A unique handle of a remote call.
-
typedef uint32_t SilKit_RpcCallStatus
The status of a RpcCallResultEvent. Informs whether a call was successful.