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/server/message_parser.zig | |
| parent | 5471cbe15587eacedac6a2672b696b7bfdbad694 (diff) | |
Diffstat (limited to 'src/server/message_parser.zig')
| -rw-r--r-- | src/server/message_parser.zig | 19 |
1 files changed, 14 insertions, 5 deletions
diff --git a/src/server/message_parser.zig b/src/server/message_parser.zig index 917ea70..404a4e3 100644 --- a/src/server/message_parser.zig +++ b/src/server/message_parser.zig @@ -123,15 +123,24 @@ fn parsePub(in: *std.Io.Reader) !Message.Pub { // try returning error in debug mode, only null in release? pub fn parseNextMessage(alloc: std.mem.Allocator, in: *std.Io.Reader) ?Message { const message_type: MessageType = blk: { - const word: []const u8 = (in.takeDelimiter(' ') catch return null) orelse return null; - std.debug.print("word: {s}\n", .{word}); - break :blk MessageType.parse(word) orelse return null; + var word: ["CONNECT".len]u8 = undefined; + var len: usize = 0; + for (&word, 0..) |*b, i| { + const byte = in.takeByte() catch return null; + if (std.ascii.isUpper(byte)) { + b.* = byte; + len = i + 1; + } else break; + } + std.debug.print("word: '{s}'\n", .{word[0..len]}); + break :blk MessageType.parse(word[0..len]) orelse return null; }; - // defer in.toss(2); // CRLF + std.debug.print("buffered: '{s}'\n", .{in.buffered()}); + defer in.toss(2); // CRLF return switch (message_type) { .connect => .{ .connect = parseJsonMessage(Message.Connect, alloc, in) catch return null }, .@"pub" => .{ .@"pub" = parsePub(in) catch |err| std.debug.panic("{}", .{err}) }, - .ping => .{ .ping = {} }, + .ping => .ping, else => null, }; } |
