The details the functions available in the Storyboard IO library,
libgreio.a
, are also documented in the Storyboard IO header
file gre/greio.h>
.
int gre_io_add_mdata( gre_io_serialized_data_t ** mbuffer, const char * key_name, const char * data_format, const void * data, int data_nbytes )
Add a data change key/value pair to a serialized buffer. This call can be used to serialize multiple data changes into a single Storyboard IO send operation to improve efficiency.
Once an multi-part data buffer is constructed, it can be sent using the
gre_io_send_mdata
function.
Parameters:
buffer The buffer containing the serialized data
key_name The data key which is to be set
data_format The format for the data to be set
data The data value to set
data_nbytes The number of bytes used for the data
Returns:
-1 on failure anything else is success
void gre_io_close( gre_io_t * handle )
Close an io connection. Any pending clients will return with an error on their pending actions.
Parameters:
handle A valid handle created with gre_io_open()
void gre_io_free_buffer( gre_io_serialized_data_t * buffer )
This de-allocates the memory associated with a buffer created through the Storyboard IO API.
Parameters:
buffer The buffer whose memory is to be de-allocated
void gre_io_grow_buffer( gre_io_t* handle, gre_io_serialized_data_t * buffer )
This function attempts to expand the internal capacity of the Storyboard IO transport to ensure that the payload contained within serialized buffer can be transmitted.
Note | |
---|---|
This call is not supported by all platforms and may fail if the transport buffer can not be resized. |
Parameters:
handle The handle to the Storyboard IO channel to resize
buffer The buffer whose capacity is to be matched by the transport
Returns:
-1 on failure otherwise success
gre_io_t* gre_io_open( const char * io_name, int flag, ... )
Open a Storyboard IO communication channel using a named connection.
Parameters:
io_name The name of the io-channel to use
flags The mode you want to open the queue in
Flags define how the connection is opend. Possible flags are:
GRE_IO_TYPE_RDONLY: open read only, creating the channel if it doesn't exist
GRE_IO_TYPE_XRDONLY: open for exclusive read, unlinking an existing channel and creating a new one
GRE_IO_TYPE_WRONLY: open write only
GRE_IO_FLAG_NONBLOCK: open non-blocking
Returns:
Returns a valid Storyboard IO handle or NULL if no channel can be created.
int gre_io_receive( gre_io_t * handle, gre_io_serialized_data_t ** buffer )
Receive a serialized event from a channel. By default this call blocks
until an event is received or until the channel is destroyed unless the
GRE_IO_FLAG_NONBLOCK flag was passed to the
gre_io_open()
call.
In order to receive events, the handle must have been opened for reading
using one of GRE_IO_RDONLY
or
GRE_IO_XRDONLY
.
Parameters:
handle A valid handle created with gre_io_open()
buffer A pointer to a serialized buffer pointer. If the buffer is NULL then a new
buffer is allocated otherwise the buffer provided is used to store the received event.
Returns:
The size of the message received in bytes or -1 on failure.
int gre_io_send( gre_io_t * handle, gre_io_serialized_data_t * buffer )
Send a serialized event buffer to a channel. In order to send events, the
handle must have been opened for writing using
GRE_IO_WRONLY
.
Parameters:
handle A valid handle created with gre_io_open()
buffer A data buffer containing a serialized event
Returns:
-1 on failure otherwise success.
int gre_io_send_mdata( gre_io_t * handle, gre_io_serialized_data_t * md_buffer )
Send a serialized buffer of mdata (data manager key/value pairs) to the
handle. The handle must have been opened for writing using
GRE_IO_WRONLY
.
Parameters:
handle A valid handle created with gre_io_open()
buffer A data buffer containing a serialized data
Returns:
-1 on failure anything else is success
gre_io_serialized_data_t* gre_io_serialize( gre_io_serialized_data_t * buffer, const char * event_addr, const char * event_name, const char * event_format, const void * event_data, int event_nbytes )
Serialize individual event items (see gre/io_mgr.h
) into a
single buffer for transmission using Storyboard IO.
Parameters:
buffer The buffer that will contain the serialized data or NULL if a new buffer should be allocated
event_addr The name of the event target, or NULL to send to the default target
event_name The name of the event to send, or NULL to send an empty event
event_format The format of the data (see gre/data_format.h
or NULL if no data is being sent
event_data A pointer do the data to transmit, or NULL if no data is transmitted
event_nbytes The number of data bytes to transmit, or NULL if no data is transmitted
Returns:
A buffer with the serialized data or NULL on error. It may be necessary for the
internal buffer to be re-sized or re-allocated if the new data payload is larger than the
previous one is being serialized.
gre_io_serialized_data_t* gre_io_size_buffer( gre_io_serialized_data_t * buffer, int nbytes )
This function ensures that the specified buffer has enough internal storage capacity for a payload of nbytes size. If the buffer is NULL or the existing capacity is not large enough then a new memory buffer will be assigned to the buffer object.
Parameters:
buffer The buffer to be sized, or NULL to allocate a new buffer
nbytes The number of bytes this buffer should be able to support
Returns:
A buffer with room for a message nbytes in size or NULL if the space could not be allocated
int gre_io_unserialize( gre_io_serialized_data_t * buffer, char ** event_addr, char ** event_name, char ** event_format, void ** event_data )
Transform a serialized buffer into individual event items (see
gre/io_mgr.h
). The pointers returned point back into the
content of the serialized buffer so the buffer can't be de-allocated until
clients are finished referencing the event items returned from this
call.
Parameters:
buffer The buffer containing the serialized data
event_addr Location to store the event target
event_name Location to store the event name
event_format Location to store the event format
event_data Location to store the event data
Returns:
The number of bytes in the event_data structure
void gre_io_zero_buffer( gre_io_serialized_data_t * buffer )
This clears the internal byte count of the buffer, but does not de-allocate the buffer's memory.
Use this function to reset a buffer in between multiple calls to
gre_io_serialize
Parameters:
buffer The buffer to have its byte count cleared