From 907cda4c172936c6d5b7ea2ac1a3a0986c875853 Mon Sep 17 00:00:00 2001 From: ubq323 Date: Sat, 27 Apr 2024 21:27:12 +0100 Subject: use poll to check writing as well as reading; packet_reader handles both now --- client/main.ha | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) (limited to 'client/main.ha') diff --git a/client/main.ha b/client/main.ha index 081c422..30a8341 100644 --- a/client/main.ha +++ b/client/main.ha @@ -47,9 +47,11 @@ export fn main() void = { }; const pollfd: [1]poll::pollfd = [ poll::pollfd { - fd = conn, events=poll::event::POLLIN, revents = 0 + fd = conn, + events=poll::event::POLLIN | poll::event::POLLOUT, + ... }]; - const packet_reader = packet_reader::new(); + const packet_reader = packet_reader::new(conn); // paintui state let pstate = paintui::state { size_idx = 4, ... }; @@ -64,7 +66,7 @@ export fn main() void = { let mouse_down = false; - process_chunk_loadedness(&pmgr, conn, camera_pos); + process_chunk_loadedness(&pmgr, &packet_reader, camera_pos); const win_pic = picture_from_surface(wsurf, (9,9)); for (!quit) { @@ -108,18 +110,20 @@ export fn main() void = { case void => yield; case let op: drawing::op => perform_drawop(&pmgr, op); - packet_reader::send(conn, op: packet_reader::packet_drawop)!; + packet_reader::write(&packet_reader, op: packet_reader::packet_drawop)!; }; if (did_move) { - packet_reader::send(conn, camera_pos: packet_reader::packet_position)!; - process_chunk_loadedness(&pmgr, conn, camera_pos); + packet_reader::write(&packet_reader, camera_pos: packet_reader::packet_position)!; + process_chunk_loadedness(&pmgr, &packet_reader, camera_pos); }; const n = poll::poll(pollfd, poll::NONBLOCK)!; if (n > 0) { - packet_reader::read(&packet_reader, conn)!; - for (true) match (packet_reader::next(&packet_reader)) { + const should_read = 0 != pollfd[0].revents & poll::event::POLLIN; + const should_write = 0 != pollfd[0].revents & poll::event::POLLOUT; + packet_reader::service(&packet_reader, should_read, should_write)!; + for (true) match (packet_reader::read_next(&packet_reader)) { case done => break; case let e: packet_reader::error => fmt::fatalf("death: packet_reader: {}", e); -- cgit v1.2.3