emsApplication/3rdPartner/libhv/event/rudp.h

53 lines
1.2 KiB
C

#ifndef HV_RUDP_H_
#define HV_RUDP_H_
#include "hloop.h"
#if WITH_RUDP
#include "rbtree.h"
#include "hsocket.h"
#include "hmutex.h"
#if WITH_KCP
#include "kcp/hkcp.h"
#endif
typedef struct rudp_s {
struct rb_root rb_root;
hmutex_t mutex;
} rudp_t;
typedef struct rudp_entry_s {
struct rb_node rb_node;
sockaddr_u addr; // key
// val
hio_t* io;
#if WITH_KCP
kcp_t kcp;
#endif
} rudp_entry_t;
// NOTE: rudp_entry_t alloc when rudp_get
void rudp_entry_free(rudp_entry_t* entry);
void rudp_init(rudp_t* rudp);
void rudp_cleanup(rudp_t* rudp);
bool rudp_insert(rudp_t* rudp, rudp_entry_t* entry);
// NOTE: just rb_erase, not free
rudp_entry_t* rudp_remove(rudp_t* rudp, struct sockaddr* addr);
rudp_entry_t* rudp_search(rudp_t* rudp, struct sockaddr* addr);
#define rudp_has(rudp, addr) (rudp_search(rudp, addr) != NULL)
// rudp_search + malloc + rudp_insert
rudp_entry_t* rudp_get(rudp_t* rudp, struct sockaddr* addr);
// rudp_remove + free
void rudp_del(rudp_t* rudp, struct sockaddr* addr);
// rudp_get(&io->rudp, io->peeraddr)
rudp_entry_t* hio_get_rudp(hio_t* io);
#endif // WITH_RUDP
#endif // HV_RUDP_H_