diff options
| author | Nathan Reiner <nathan@nathanreiner.xyz> | 2025-11-17 09:57:09 +0100 |
|---|---|---|
| committer | Nathan Reiner <nathan@nathanreiner.xyz> | 2025-11-17 09:57:09 +0100 |
| commit | e95cf5c7b6a08eb560763d5167fbddc1c2117bcc (patch) | |
| tree | 2f7815c9f39328fcaced2113de727f63e4837fa3 /src/main.zig | |
| parent | 0016aaa197697ec5ff38dfb3f63ac8b6f74b48e0 (diff) | |
add file uploading and multi-threading
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); } |