#pragma once

#include <stddef.h>

typedef struct uv_pipe_s uv_pipe_t;

typedef struct _tf_packetstream_t tf_packetstream_t;

typedef void (tf_packetstream_onreceive_t)(int packet_type, const char* begin, size_t length, void* user_data);

tf_packetstream_t* tf_packetstream_create();
void tf_packetstream_destroy(tf_packetstream_t* stream);

void tf_packetstream_start(tf_packetstream_t* stream);
void tf_packetstream_send(tf_packetstream_t* stream, int packet_type, const char* begin, size_t length);
void tf_packetstream_set_on_receive(tf_packetstream_t* stream, tf_packetstream_onreceive_t* callback, void* user_data);
void tf_packetstream_close(tf_packetstream_t* stream);
uv_pipe_t* tf_packetstream_get_pipe(tf_packetstream_t* stream);
