diff options
| author | Robby Zambito <contact@robbyzambito.me> | 2025-11-19 09:49:32 -0500 |
|---|---|---|
| committer | Robby Zambito <contact@robbyzambito.me> | 2025-11-21 13:12:02 -0500 |
| commit | dbf189adc031974e4c6510b8638f864b687fa41f (patch) | |
| tree | 3dfd9d7daf15b370992b8f65c6df3633853bdfae /src/main.zig | |
| parent | 5471cbe15587eacedac6a2672b696b7bfdbad694 (diff) | |
Diffstat (limited to 'src/main.zig')
| -rw-r--r-- | src/main.zig | 25 |
1 files changed, 15 insertions, 10 deletions
diff --git a/src/main.zig b/src/main.zig index bcb2d98..fb6be1c 100644 --- a/src/main.zig +++ b/src/main.zig @@ -3,6 +3,7 @@ const zits = @import("zits"); const clap = @import("clap"); const MessageType = zits.MessageParser.MessageType; +const parseNextMessage = zits.MessageParser.parseNextMessage; const SubCommands = enum { help, @@ -173,17 +174,12 @@ fn handleConnection(io: std.Io, stream: std.Io.net.Stream, info: ServerInfo) voi fn processClient(in: *std.Io.Reader, out: *std.Io.Writer, info: ServerInfo) !void { try writeInfo(out, info); - const initial_message_type = MessageType.parse((in.takeDelimiter(' ') catch return error.InvalidMessageType) orelse "") orelse return error.InvalidMessageType; - if (initial_message_type != .connect) return error.InvalidMessageType; - // move this inside client_state declaration var json_parse_buf: [4096]u8 = undefined; var json_parse_alloc_fb: std.heap.FixedBufferAllocator = std.heap.FixedBufferAllocator.init(&json_parse_buf); var json_parse_alloc = json_parse_alloc_fb.allocator(); var json_reader: std.json.Reader = .init(json_parse_alloc, in); - std.debug.print("buffered:{s}\n", .{in.buffered()}); - // var client_state = try std.json.parseFromSliceLeaky(ClientState, json_parse_alloc, in.buffered(), .{}); // in.toss(in.buffered().len); @@ -193,23 +189,32 @@ fn processClient(in: *std.Io.Reader, out: *std.Io.Writer, info: ServerInfo) !voi std.debug.print("client_state: {}\n", .{client_state}); while (true) { - // Rebase the next message to the start of the buffer - // in.rebase(in.buffer.len); - const next_message_type = MessageType.parse((in.takeDelimiter(' ') catch return error.InvalidMessageType) orelse "") orelse return error.InvalidMessageType; + const next_message_type = parseNextMessage(json_parse_alloc, in) orelse return; switch (next_message_type) { - .connect => { - json_parse_alloc_fb = std.heap.FixedBufferAllocator.init(&json_parse_buf); + .connect => |connect| { + std.debug.print("connect: {s}\n", .{connect.name orelse "\"\""}); + json_parse_alloc_fb = .init(&json_parse_buf); json_parse_alloc = json_parse_alloc_fb.allocator(); json_reader = .init(json_parse_alloc, in); // client_state = try std.json.parseFromTokenSourceLeaky(ClientState, json_parse_alloc, &json_reader, .{}); std.debug.print("client_state: {any}\n", .{client_state}); }, + .ping => writePong(out) catch |err| { + std.debug.panic("failed to pong: {any}\n", .{err}); + }, else => |msg| std.debug.print("received {}\n", .{msg}), } } } +fn writePong(out: *std.Io.Writer) !void { + std.debug.print("in writePong\n", .{}); + _ = try out.write("PONG"); + _ = try out.write("\r\n"); + try out.flush(); +} + fn writeInfo(out: *std.Io.Writer, info: ServerInfo) !void { _ = try out.write("INFO "); try std.json.Stringify.value(info, .{}, out); |
