//
//  tb_connection_observers.h
//  Tightbeam
//

#ifndef tb_connection_observers_h
#define tb_connection_observers_h

#include <Tightbeam/tb_transport.h>

TB_ASSUME_NONNULL_BEGIN
__TB_BEGIN_DECLS

typedef void (^tb_conncection_send_buffer_observer_b)(
        tb_transport_t transport, tb_message_t query,
        tb_message_t _Nonnull * _Nullable response,
        tb_connection_flags_t flags);
typedef void (^tb_conncection_activate_service_observer_b)(
        tb_transport_t transport);
typedef void (^tb_conncection_activate_client_observer_b)(
        tb_transport_t transport);
typedef void (^tb_conncection_reset_message_observer_b)(
        tb_transport_t transport, tb_transport_message_buffer_t msg_buffer,
        size_t capabilities,size_t bytes);
typedef void (^tb_connection_message_handler_observer_b)(tb_message_t message);

typedef struct _tb_connection_observers_table_s {
    tb_conncection_send_buffer_observer_b send_message_observer;
    tb_conncection_activate_client_observer_b client_activate_observer;
    tb_conncection_activate_service_observer_b service_activate_observer;
    tb_conncection_reset_message_observer_b reset_message_observer;
    tb_connection_message_handler_observer_b message_handler_observer;
} _tb_connection_observers_table_s, *_tb_connection_observers_table_t;

__TB_END_DECLS
TB_ASSUME_NONNULL_END

#endif /* tb_connection_observers_h */
