diff options
Diffstat (limited to 'src/server/client.zig')
| -rw-r--r-- | src/server/client.zig | 57 |
1 files changed, 18 insertions, 39 deletions
diff --git a/src/server/client.zig b/src/server/client.zig index f74e6b3..5c8d0cd 100644 --- a/src/server/client.zig +++ b/src/server/client.zig @@ -32,17 +32,31 @@ pub fn start(self: *Client, io: std.Io, alloc: std.mem.Allocator, queue: *std.Io for (msgs[0..len]) |msg| { switch (msg) { .@"+ok" => { - try writeOk(self.to_client); + _ = try self.to_client.write("+OK\r\n"); }, .pong => { - try writePong(self.to_client); + _ = try self.to_client.write("PONG\r\n"); }, .info => |info| { - try writeInfo(self.to_client, info); + _ = try self.to_client.write("INFO "); + try std.json.Stringify.value(info, .{}, self.to_client); + _ = try self.to_client.write("\r\n"); }, .msg => |m| { defer m.deinit(alloc); - try writeMsg(self.to_client, m); + try self.to_client.print( + "MSG {s} {s} {s} {d}\r\n{s}\r\n", + .{ + m.subject, + m.sid, + m.reply_to orelse "", + m.payload.len, + m.payload, + }, + ); + }, + .@"-err" => |s| { + _ = try self.to_client.print("-ERR '{s}'\r\n", .{s}); }, else => |m| { std.debug.panic("unimplemented write: {any}\n", .{m}); @@ -60,42 +74,7 @@ pub fn send(self: *Client, io: std.Io, msg: Message) !void { } pub fn next(self: *Client, allocator: std.mem.Allocator) !Message { - // std.debug.print("in client awaiting next message\n", .{}); - // errdefer std.debug.print("actually it was canceled\n", .{}); - // defer std.debug.print("client returning next message!\n", .{}); return Message.next(allocator, self.from_client); - // return self.send_queue.getOne(io); -} - -fn writeOk(out: *std.Io.Writer) !void { - _ = try out.write("+OK\r\n"); -} - -fn writeErr(out: *std.Io.Writer, msg: []const u8) !void { - _ = try out.print("-ERR '{s}'\r\n", .{msg}); -} - -fn writePong(out: *std.Io.Writer) !void { - _ = try out.write("PONG\r\n"); -} - -pub fn writeInfo(out: *std.Io.Writer, info: Message.ServerInfo) !void { - _ = try out.write("INFO "); - try std.json.Stringify.value(info, .{}, out); - _ = try out.write("\r\n"); -} - -fn writeMsg(out: *std.Io.Writer, msg: Message.Msg) !void { - try out.print( - "MSG {s} {s} {s} {d}\r\n{s}\r\n", - .{ - msg.subject, - msg.sid, - msg.reply_to orelse "", - msg.payload.len, - msg.payload, - }, - ); } test { |
