#pragma once #include #include "socket/socket.h" #include "loop.h" #include "packet_stream.h" struct nn_multiplex_direct { struct nn_packet_stream *closing_bridge; bool (*connection_callback)(void *, u8 id, struct nn_packet_stream *stream); void *userdata; }; struct nn_multiplex_socket; struct nn_multiplex_connection { struct nn_socket sock; ev_io event; struct nn_multiplex_socket *multi; }; struct nn_multiplex_socket { struct nn_socket sock; struct nn_event_loop *loop; ev_io event; bool (*connection_callback)(void *, u8 id, struct nn_packet_stream *stream); void *userdata; }; bool nn_multiplex_socket_init(struct nn_multiplex_socket *multi, u8 type, bool (*connection_callback)(void *, u8, struct nn_packet_stream *), void *userdata); bool nn_multiplex_socket_listen(struct nn_multiplex_socket *multi, struct nn_event_loop *loop, str *addr, u16 port); void nn_multiplex_socket_close(struct nn_multiplex_socket *multi); void nn_multiplex_direct_init(bool (*connection_callback)(void *, u8, struct nn_packet_stream *), void *userdata); void nn_multiplex_direct_connect(struct nn_packet_stream *client, u8 id); void nn_multiplex_direct_reconnect(struct nn_packet_stream *client); struct nn_packet_stream *nn_multiplex_direct_get_bridge(void); void nn_multiplex_direct_close(void);