summaryrefslogtreecommitdiff
path: root/src/server/main.zig
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/main.zig')
-rw-r--r--src/server/main.zig18
1 files changed, 10 insertions, 8 deletions
diff --git a/src/server/main.zig b/src/server/main.zig
index 4c1093f..92ac671 100644
--- a/src/server/main.zig
+++ b/src/server/main.zig
@@ -160,13 +160,7 @@ fn handleConnection(
var reader = stream.reader(io, &r_buffer);
const in = &reader.interface;
- // Create client
- var client: Client = .init(null, in, out);
- defer client.deinit(server_allocator);
-
- try server.addClient(server_allocator, id, &client);
- defer server.removeClient(io, server_allocator, id);
-
+ // Set up buffer queue
var qbuf: [8]Message = undefined;
var queue: std.Io.Queue(Message) = .init(&qbuf);
defer {
@@ -174,15 +168,23 @@ fn handleConnection(
while (queue.getOne(io)) |msg| {
switch (msg) {
.msg => |m| m.deinit(server_allocator),
+ .hmsg => |h| h.deinit(server_allocator),
else => {},
}
} else |_| {}
}
+ // Create client
+ var client: Client = .init(null, &queue, in, out);
+ defer client.deinit(server_allocator);
+
+ try server.addClient(server_allocator, id, &client);
+ defer server.removeClient(io, server_allocator, id);
+
// Do initial handshake with client
try queue.putOne(io, .{ .info = server.info });
- var client_task = try io.concurrent(Client.start, .{ &client, io, server_allocator, &queue });
+ var client_task = try io.concurrent(Client.start, .{ &client, io, server_allocator });
defer client_task.cancel(io) catch {};
// Messages are owned by the server after they are received from the client