diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/main.zig | 46 |
1 files changed, 39 insertions, 7 deletions
diff --git a/src/main.zig b/src/main.zig index 2b983e1..6e03226 100644 --- a/src/main.zig +++ b/src/main.zig @@ -90,10 +90,13 @@ const ServerInfo = struct { }; fn serverMain(gpa: std.mem.Allocator, iter: *std.process.ArgIterator, main_args: MainArgs) !void { - _ = gpa; _ = iter; _ = main_args; + var threaded: std.Io.Threaded = .init(gpa); + defer threaded.deinit(); + const io = threaded.io(); + const info: ServerInfo = .{ .server_id = "foo", .server_name = "bar", @@ -101,12 +104,41 @@ fn serverMain(gpa: std.mem.Allocator, iter: *std.process.ArgIterator, main_args: .max_payload = 6969, }; - var out_fs = std.fs.File.stderr().writer(&.{}); - const out = &out_fs.interface; + var server = try std.Io.net.IpAddress.listen(.{ + .ip4 = .{ + .bytes = .{ 0, 0, 0, 0 }, + .port = info.port, + }, + }, io, .{}); + defer server.deinit(io); + + var group: std.Io.Group = .init; + defer group.wait(io); + for (0..5) |_| { + 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); + const out = &writer.interface; + writeInfo(out, info) catch |err| { + std.debug.print("failed to write to client: {}\n", .{err}); + }; +} - try std.json.Stringify.value(info, .{ - .whitespace = .indent_2, - }, out); +fn writeInfo(out: *std.Io.Writer, info: ServerInfo) !void { + defer out.flush() catch {}; - std.debug.print("in serverMain\n", .{}); + _ = try out.write("INFO "); + try std.json.Stringify.value(info, .{}, out); + _ = try out.write(&.{ 0x0D, 0x0A }); } |
