diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/main.zig | 49 |
1 files changed, 39 insertions, 10 deletions
diff --git a/src/main.zig b/src/main.zig index 6e03226..7d0bfaf 100644 --- a/src/main.zig +++ b/src/main.zig @@ -97,11 +97,20 @@ fn serverMain(gpa: std.mem.Allocator, iter: *std.process.ArgIterator, main_args: defer threaded.deinit(); const io = threaded.io(); + // const info: ServerInfo = .{ + // .server_id = "foo", + // .server_name = "bar", + // .version = "6.9.0", + // .max_payload = 6969, + // }; + const info: ServerInfo = .{ - .server_id = "foo", + .server_id = "NBEK5DBBB4ZO5LTBGPXACZSB2QUTODC6GGN5NLOSPIGSRFWJID4XU52C", .server_name = "bar", - .version = "6.9.0", - .max_payload = 6969, + .version = "2.11.8", + .go = "go1.24.6", + .headers = true, + .max_payload = 1048576, }; var server = try std.Io.net.IpAddress.listen(.{ @@ -118,21 +127,41 @@ fn serverMain(gpa: std.mem.Allocator, iter: *std.process.ArgIterator, main_args: const stream = try server.accept(io); group.async(io, handleConnection, .{ io, stream, info }); } - - // var buffer: [1024]u8 = undefined; - // var out_fs = std.fs.File.stderr().writer(&buffer); - // const out = &out_fs.interface; - } fn handleConnection(io: std.Io, stream: std.Io.net.Stream, info: ServerInfo) void { defer stream.close(io); - var buffer: [1024]u8 = undefined; - var writer = stream.writer(io, &buffer); + var w_buffer: [1024]u8 = undefined; + var writer = stream.writer(io, &w_buffer); const out = &writer.interface; writeInfo(out, info) catch |err| { std.debug.print("failed to write to client: {}\n", .{err}); }; + + var r_buffer: [1024]u8 = undefined; + var reader = stream.reader(io, &r_buffer); + const in = &reader.interface; + + var stdout_buffer: [1024]u8 = undefined; + const stdout_file = std.fs.File.stdout(); + var stdout_file_writer = stdout_file.writer(&stdout_buffer); + const stdout_writer = &stdout_file_writer.interface; + + var timeout = io.async(std.Io.sleep, .{ io, .fromSeconds(1), .real }); + defer timeout.cancel(io) catch {}; + + var user_res = io.async(std.Io.Reader.streamRemaining, .{ in, stdout_writer }); + defer _ = user_res.cancel(io) catch {}; + + switch (io.select(.{ + .timeout = &timeout, + .data = &user_res, + }) catch unreachable) { + .timeout => std.debug.print("timeout\n", .{}), + .data => |d| { + std.debug.print("received data {any}\n", .{d}); + }, + } } fn writeInfo(out: *std.Io.Writer, info: ServerInfo) !void { |
