/* PipeWire AGL Cluster IPC * * Copyright © 2021 Collabora Ltd. * @author Julian Bouzas * * SPDX-License-Identifier: MIT */ #ifndef __ICIPC_RECEIVER_H__ #define __ICIPC_RECEIVER_H__ #include #include #include #include "defs.h" #ifdef __cplusplus extern "C" { #endif struct icipc_receiver; enum icipc_receiver_sender_state { ICIPC_RECEIVER_SENDER_STATE_CONNECTED = 0, ICIPC_RECEIVER_SENDER_STATE_DISCONNECTED }; struct icipc_receiver_events { /* emitted when a sender state changes */ void (*sender_state)( struct icipc_receiver *self, int sender_fd, enum icipc_receiver_sender_state state, void *data); /* emitted when message is received and needs to be handled */ bool (*handle_message)( struct icipc_receiver *self, int sender_fd, const uint8_t *buffer, size_t size, void *data); }; ICIPC_API struct icipc_receiver *icipc_receiver_new( const char *path, size_t buffer_size, const struct icipc_receiver_events *events, void *events_data, size_t user_size); ICIPC_API void icipc_receiver_free(struct icipc_receiver *self); ICIPC_API bool icipc_receiver_start(struct icipc_receiver *self); ICIPC_API void icipc_receiver_stop(struct icipc_receiver *self); ICIPC_API bool icipc_receiver_is_running(struct icipc_receiver *self); /* for subclasses only */ ICIPC_API void *icipc_receiver_get_user_data(struct icipc_receiver *self); #ifdef __cplusplus } #endif #endif