diff options
Diffstat (limited to 'src/main.zig')
| -rw-r--r-- | src/main.zig | 43 |
1 files changed, 5 insertions, 38 deletions
diff --git a/src/main.zig b/src/main.zig index 6b6838c..4ea4954 100644 --- a/src/main.zig +++ b/src/main.zig @@ -5,15 +5,9 @@ pub const std_options = std.Options { .logFn = memora.log.handler, }; -const log = std.log.scoped(.main); - -var net_server: std.net.Server = undefined; -var storage: memora.Storage = undefined; - fn signal_handler(signo: i32) callconv(.c) void { if (signo == std.os.linux.SIG.INT) { - log.info("shutdown", .{}); - net_server.deinit(); + server.deinit(); std.process.exit(0); } } @@ -28,42 +22,15 @@ fn register_sigaction() void { _ = std.os.linux.sigaction(std.os.linux.SIG.INT, &sa, null); } +var server = memora.Server{}; + pub fn main() !void { var gpa = std.heap.GeneralPurposeAllocator(.{}){}; defer std.debug.assert(gpa.deinit() == .ok); const allocator = gpa.allocator(); - storage = try .init(allocator); - const address = try std.net.Address.parseIpAndPort("0.0.0.0:8080"); - net_server = try address.listen(.{ .reuse_address = true }); - defer net_server.deinit(); - + try server.init(address, allocator); register_sigaction(); - - log.info("listening on {f}", .{address}); - - while (true) { - const connection = net_server.accept() catch |err| { - log.err("error: {}", .{err}); - continue; - }; - defer connection.stream.close(); - - var read_buf: [1024 * 8]u8 = undefined; - var write_buf: [1024 * 8]u8 = undefined; - var reader = connection.stream.reader(&read_buf); - var writer = connection.stream.writer(&write_buf); - var http_server = std.http.Server.init(reader.interface(), &writer.interface); - - var request = http_server.receiveHead() catch continue; - log.info("{s} {s}", .{std.enums.tagName(std.http.Method, request.head.method) orelse "<unknown>", request.head.target}); - - const handler_info = memora.routes.get(request.head.target); - try handler_info.handle( - &request, - &storage, - allocator - ); - } + server.run(allocator); } |