From 43cc8217ee81b883d8740aa868cba240fe881c17 Mon Sep 17 00:00:00 2001 From: Rene Schallner Date: Thu, 12 Jan 2023 20:35:43 +0100 Subject: [PATCH] added serve example --- build.zig | 2 +- examples/serve/index.html | 11 +++++++++++ examples/serve/serve.zig | 25 +++++++++++++++++++++++++ examples/serve/two.html | 11 +++++++++++ src/deps/zap.zig | 20 ++++++++++---------- 5 files changed, 58 insertions(+), 11 deletions(-) create mode 100644 examples/serve/index.html create mode 100644 examples/serve/serve.zig create mode 100644 examples/serve/two.html diff --git a/build.zig b/build.zig index 3642a97..a486a18 100644 --- a/build.zig +++ b/build.zig @@ -20,7 +20,7 @@ pub fn build(b: *std.build.Builder) !void { }{ .{ .name = "hello", .src = "examples/hello/hello.zig" }, .{ .name = "routes", .src = "examples/routes/routes.zig" }, - // .{ .name = "serve", .src = "examples/serve/serve.zig" }, + .{ .name = "serve", .src = "examples/serve/serve.zig" }, }) |excfg| { const ex_name = excfg.name; const ex_src = excfg.src; diff --git a/examples/serve/index.html b/examples/serve/index.html new file mode 100644 index 0000000..c09bc21 --- /dev/null +++ b/examples/serve/index.html @@ -0,0 +1,11 @@ + + + + +

My First Heading

+ +

My first page.

+ + + + diff --git a/examples/serve/serve.zig b/examples/serve/serve.zig new file mode 100644 index 0000000..4bf32d0 --- /dev/null +++ b/examples/serve/serve.zig @@ -0,0 +1,25 @@ +const std = @import("std"); +const zap = @import("zap"); + +fn on_request(r: zap.SimpleRequest) void { + // TODO: send 404 response + _ = r.sendBody("

404 - File not found

"); +} + +pub fn main() !void { + var listener = zap.SimpleHttpListener.init(.{ + .port = 3000, + .on_request = on_request, + .public_folder = std.mem.span("examples/serve"), + .log = true, + }); + try listener.listen(); + + std.debug.print("Listening on 0.0.0.0:3000\n", .{}); + + // start worker threads + zap.start(.{ + .threads = 2, + .workers = 2, + }); +} diff --git a/examples/serve/two.html b/examples/serve/two.html new file mode 100644 index 0000000..1d4b430 --- /dev/null +++ b/examples/serve/two.html @@ -0,0 +1,11 @@ + + + + +

My SECOND Heading

+ +

My second page.

+ + + + diff --git a/src/deps/zap.zig b/src/deps/zap.zig index d6d38dd..8da4199 100644 --- a/src/deps/zap.zig +++ b/src/deps/zap.zig @@ -44,8 +44,8 @@ pub const SimpleHttpRequestFn = *const fn (SimpleRequest) void; pub const SimpleHttpListenerSettings = struct { port: usize, interface: [*c]const u8 = null, - on_request: SimpleHttpRequestFn, - public_folder: ?[]u8 = null, + on_request: ?SimpleHttpRequestFn, + public_folder: ?[]const u8 = null, max_clients: ?u8 = null, timeout: ?u8 = null, log: bool = false, @@ -71,7 +71,7 @@ pub const SimpleHttpListener = struct { .query = fio2str(r.*.query), .h = r, }; - l.settings.on_request(req); + l.settings.on_request.?(req); } } @@ -82,14 +82,14 @@ pub const SimpleHttpListener = struct { if (self.settings.public_folder) |pf| { pfolder_len = pf.len; // TODO: make sure it's 0-terminated!!! - if (pf[pf.len - 1] != 0) { - return error.ValueNotZeroTerminated; - } + // if (pf[pf.len - 1] != 0) { + // return error.ValueNotZeroTerminated; + // } pfolder = pf.ptr; } var x: C.http_settings_s = .{ - .on_request = Self.theOneAndOnlyRequestCallBack, + .on_request = if (self.settings.on_request) |_| Self.theOneAndOnlyRequestCallBack else null, .on_upgrade = null, .on_response = null, .on_finish = null, @@ -164,9 +164,9 @@ pub fn listen(port: [*c]const u8, interface: [*c]const u8, settings: ListenSetti if (settings.public_folder) |pf| { pfolder_len = pf.len; // TODO: make sure it's 0-terminated!!! - if (pf[pf.len - 1] != 0) { - return error.ValueNotZeroTerminated; - } + // if (pf[pf.len - 1] != 0) { + // return error.ValueNotZeroTerminated; + // } pfolder = pf.ptr; } var x: C.http_settings_s = .{