Implement simple websocket client

This commit is contained in:
Vitaliy Filippov
2020-04-25 23:11:50 +03:00
parent 35481925b1
commit 268b497c0b
6 changed files with 553 additions and 314 deletions
+17
View File
@@ -118,9 +118,11 @@ struct ring_consumer_t
class ring_loop_t
{
std::vector<std::pair<int,std::function<void()>>> get_sqe_queue;
std::vector<ring_consumer_t*> consumers;
struct ring_data_t *ring_datas;
int *free_ring_data;
int wait_sqe_id;
unsigned free_ring_data_ptr;
bool loop_again;
struct io_uring ring;
@@ -139,6 +141,21 @@ public:
io_uring_sqe_set_data(sqe, ring_datas + free_ring_data[--free_ring_data_ptr]);
return sqe;
}
inline int wait_sqe(std::function<void()> cb)
{
get_sqe_queue.push_back({ wait_sqe_id, cb });
return wait_sqe_id++;
}
inline void cancel_wait_sqe(int wait_id)
{
for (int i = 0; i < get_sqe_queue.size(); i++)
{
if (get_sqe_queue[i].first == wait_id)
{
get_sqe_queue.erase(get_sqe_queue.begin()+i, get_sqe_queue.begin()+i+1);
}
}
}
inline int submit()
{
return io_uring_submit(&ring);