mirror of
https://git.robbyzambito.me/zits
synced 2026-02-04 03:34:48 +00:00
Serve 5 clients before quitting
This commit is contained in:
46
src/main.zig
46
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);
|
||||
|
||||
try std.json.Stringify.value(info, .{
|
||||
.whitespace = .indent_2,
|
||||
}, out);
|
||||
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;
|
||||
|
||||
std.debug.print("in serverMain\n", .{});
|
||||
}
|
||||
|
||||
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});
|
||||
};
|
||||
}
|
||||
|
||||
fn writeInfo(out: *std.Io.Writer, info: ServerInfo) !void {
|
||||
defer out.flush() catch {};
|
||||
|
||||
_ = try out.write("INFO ");
|
||||
try std.json.Stringify.value(info, .{}, out);
|
||||
_ = try out.write(&.{ 0x0D, 0x0A });
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user