|
|
@@ -1,6 +1,8 @@
|
|
|
const std = @import("std");
|
|
|
+
|
|
|
const net = std.net;
|
|
|
const posix = std.posix;
|
|
|
+const fmt = std.fmt;
|
|
|
|
|
|
const socket = @import("socket.zig");
|
|
|
const command = @import("command.zig");
|
|
|
@@ -9,7 +11,10 @@ const storage = @import("storage.zig");
|
|
|
pub fn main() !void {
|
|
|
const listener = try socket.init(8080);
|
|
|
defer posix.close(listener);
|
|
|
- std.debug.print("pizzakv!\n", .{});
|
|
|
+
|
|
|
+ std.debug.print("2025 pizzakv!\n<danilo.fragoso@dev>\n---------\n", .{});
|
|
|
+ std.debug.print("Commands:\n\nread key\nwrite key|value\ndelete key\nstatus\n", .{});
|
|
|
+ std.debug.print("---------\n", .{});
|
|
|
|
|
|
while (true) {
|
|
|
var client_address: net.Address = undefined;
|
|
|
@@ -19,20 +24,30 @@ pub fn main() !void {
|
|
|
std.debug.print("error accept: {any}\n", .{err});
|
|
|
continue;
|
|
|
};
|
|
|
- defer posix.close(conn);
|
|
|
+ //defer posix.close(conn);
|
|
|
|
|
|
std.debug.print("Connection received\n", .{});
|
|
|
- var buf: [128]u8 = undefined;
|
|
|
- const n = try socket.read(conn, &buf);
|
|
|
+ var requestBuffer: [1024 * 1024]u8 = undefined;
|
|
|
+ var responseBuffer: [1024 * 1024]u8 = undefined;
|
|
|
+ while (true) {
|
|
|
+ const n = try socket.readUntilNewLine(conn, &requestBuffer);
|
|
|
+ if (n == 0) {
|
|
|
+ break;
|
|
|
+ }
|
|
|
|
|
|
- const response = command.parse(buf[0..n]) orelse {
|
|
|
- std.debug.print("Failed to parse message\n", .{});
|
|
|
- continue;
|
|
|
- };
|
|
|
+ const cmdResponse = command.parse(requestBuffer[0..n]) orelse {
|
|
|
+ std.debug.print("Failed to parse message\n", .{});
|
|
|
+ socket.write(conn, "false\n") catch |err| {
|
|
|
+ std.debug.print("error writing: {any}\n", .{err});
|
|
|
+ };
|
|
|
+ continue;
|
|
|
+ };
|
|
|
|
|
|
- socket.write(conn, response) catch |err| {
|
|
|
- // This can easily happen, say if the client disconnects.
|
|
|
- std.debug.print("error writing: {any}\n", .{err});
|
|
|
- };
|
|
|
+ @memcpy(responseBuffer[0..cmdResponse.len], cmdResponse);
|
|
|
+ responseBuffer[cmdResponse.len] = '\n';
|
|
|
+ socket.write(conn, responseBuffer[0 .. cmdResponse.len + 1]) catch |err| {
|
|
|
+ std.debug.print("error writing: {any}\n", .{err});
|
|
|
+ };
|
|
|
+ }
|
|
|
}
|
|
|
}
|