power_play/src/net/net.h

83 lines
1.8 KiB
C

#define NET_PacketSize 1024
#define NET_Ephemeral 0xFFFFFFFFFFFFFFFFull
////////////////////////////////////////////////////////////
//~ Opaque types
Struct(NET_PipeHandle) { u64 v; };
#define NET_IsPipeNil(h) ((h).v == 0)
////////////////////////////////////////////////////////////
//~ Key types
Struct(NET_Key)
{
u8 addr[32];
};
#define NET_NilKey ((NET_Key) { 0 })
#define NET_IsKeyNil(k) (MatchStructZero(&k))
////////////////////////////////////////////////////////////
//~ Send types
Enum(NET_SendFlag)
{
NET_SendFlag_None = 0,
// Raw messages send unreliably and immediately
// NOTE: Raw message data exceeding packet size will drop
NET_SendFlag_Raw = (1 << 0),
};
////////////////////////////////////////////////////////////
//~ Message types
Struct(NET_Msg)
{
NET_Msg *next;
NET_Msg *prev;
NET_Key sender;
String data;
};
Struct(NET_MsgList)
{
i64 count;
NET_Msg *first;
NET_Msg *last;
};
////////////////////////////////////////////////////////////
//~ Stat types
Struct(NET_PipeStatistics)
{
i64 total_bytes_sent;
i64 total_bytes_received;
};
////////////////////////////////////////////////////////////
//~ @hookdecl Bootstrap
void NET_Bootstrap(void);
////////////////////////////////////////////////////////////
//~ @hookdecl Net ops
NET_Key NET_KeyFromString(String host, String port);
String NET_StringFromKey(Arena *arena, NET_Key key);
b32 NET_MatchKey(NET_Key a, NET_Key b);
u64 NET_HashFromKey(NET_Key key);
NET_PipeHandle NET_AcquirePipe(void);
void NET_Listen(NET_PipeHandle pipe_handle, u64 port);
NET_MsgList NET_Swap(Arena *arena, NET_PipeHandle pipe_handle);
void NET_Send(NET_PipeHandle pipe_handle, NET_Key dst, String data, NET_SendFlag flags);
NET_PipeStatistics NET_StatsFromPipe(NET_PipeHandle pipe_handle);