summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/main.zig46
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 });
}