summaryrefslogtreecommitdiff
path: root/src/server/client.zig
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/client.zig')
-rw-r--r--src/server/client.zig96
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");