diff options
Diffstat (limited to 'src/server/client.zig')
| -rw-r--r-- | src/server/client.zig | 96 |
1 files changed, 48 insertions, 48 deletions
diff --git a/src/server/client.zig b/src/server/client.zig index e997a4a..44de542 100644 --- a/src/server/client.zig +++ b/src/server/client.zig @@ -1,59 +1,59 @@ const Message = @import("message_parser.zig").Message; const std = @import("std"); -pub const ClientState = struct { +const Client = @This(); + +connect: ?Message.Connect, + +write_lock: std.Io.Mutex, + +from_client: *std.Io.Reader, +to_client: *std.Io.Writer, + +pub fn init( connect: ?Message.Connect, + in: *std.Io.Reader, + out: *std.Io.Writer, +) Client { + return .{ + .connect = connect, + .write_lock = .init, + .from_client = in, + .to_client = out, + }; +} - write_lock: std.Io.Mutex, - - from_client: *std.Io.Reader, - to_client: *std.Io.Writer, - - pub fn init( - connect: ?Message.Connect, - in: *std.Io.Reader, - out: *std.Io.Writer, - ) ClientState { - return .{ - .connect = connect, - .write_lock = .init, - .from_client = in, - .to_client = out, - }; - } +/// Return true if the value was put in the clients buffer to process, else false. +pub fn send(self: *Client, io: std.Io, msg: Message) !void { + try self.write_lock.lock(io); + defer self.write_lock.unlock(io); - /// Return true if the value was put in the clients buffer to process, else false. - pub fn send(self: *ClientState, io: std.Io, msg: Message) !void { - try self.write_lock.lock(io); - defer self.write_lock.unlock(io); - - switch (msg) { - .@"+ok" => { - try writeOk(self.to_client); - }, - .pong => { - try writePong(self.to_client); - }, - .info => |info| { - try writeInfo(self.to_client, info); - }, - .msg => |m| { - try writeMsg(self.to_client, m); - }, - else => { - std.debug.panic("unimplemented write", .{}); - }, - } + switch (msg) { + .@"+ok" => { + try writeOk(self.to_client); + }, + .pong => { + try writePong(self.to_client); + }, + .info => |info| { + try writeInfo(self.to_client, info); + }, + .msg => |m| { + try writeMsg(self.to_client, m); + }, + else => { + std.debug.panic("unimplemented write", .{}); + }, } +} - pub fn next(self: *ClientState, 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); - } -}; +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"); |
