diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/cli.zig | 2 | ||||
-rw-r--r-- | src/http.zig | 119 |
2 files changed, 121 insertions, 0 deletions
diff --git a/src/cli.zig b/src/cli.zig index 68d2d51b4..2f2cca06b 100644 --- a/src/cli.zig +++ b/src/cli.zig @@ -1,5 +1,6 @@ usingnamespace @import("global.zig"); +usingnamespace @import("./http.zig"); const std = @import("std"); const lex = @import("js_lexer.zig"); const logger = @import("logger.zig"); @@ -282,6 +283,7 @@ pub const Cli = struct { var log = logger.Log.init(allocator); var panicker = MainPanicHandler.init(&log); MainPanicHandler.Singleton = &panicker; + try Server.start(allocator); const args = try Arguments.parse(alloc.static, stdout, stderr); var result: options.TransformResult = undefined; diff --git a/src/http.zig b/src/http.zig new file mode 100644 index 000000000..c7ec0c786 --- /dev/null +++ b/src/http.zig @@ -0,0 +1,119 @@ +// const c = @import("./c.zig"); +const std = @import("std"); +usingnamespace @import("global.zig"); +const Address = std.net.Address; +const routez = @import("routez"); +const Request = routez.Request; +const Response = routez.Response; + +pub const Server = struct { + pub fn start(allocator: *std.mem.Allocator) !void { + var server = routez.Server.init( + allocator, + .{}, + .{ + routez.all("/", indexHandler), + routez.get("/about", aboutHandler), + routez.get("/about/more", aboutHandler2), + routez.get("/post/{post_num}/?", postHandler), + routez.static("./", "/static"), + routez.all("/counter", counterHandler), + }, + ); + var addr = Address.parseIp("127.0.0.1", 8080) catch unreachable; + server.listen(addr) catch unreachable; + } +}; + +fn indexHandler(req: Request, res: Response) !void { + try res.write("hi\n"); +} + +fn aboutHandler(req: Request, res: Response) !void { + try res.write("Hello from about\n"); +} + +fn aboutHandler2(req: Request, res: Response) !void { + try res.write("Hello from about2\n"); +} + +fn postHandler(req: Request, res: Response, args: *const struct { + post_num: []const u8, +}) !void { + try res.print("Hello from post, post_num is {s}\n", .{args.post_num}); +} + +var counter = std.atomic.Int(usize).init(0); +fn counterHandler(req: Request, res: Response) !void { + try res.print("Page loaded {d} times\n", .{counter.fetchAdd(1)}); +} + +// pub const Server = struct { +// pub var server = std.mem.zeroes(c.struct_mg_callbacks); + +// pub fn beginRequest(conn: ?*c.struct_mg_connection) callconv(.C) c_int { +// return 0; +// } +// pub fn endRequest(conn: ?*const c.struct_mg_connection, status_code: c_int) callconv(.C) void {} +// pub fn logMessage(conn: ?*const c.struct_mg_connection, msg: [*c]const u8) callconv(.C) c_int { +// return 1; +// } +// pub fn logAccess(conn: ?*const c.struct_mg_connection, msg: [*c]const u8) callconv(.C) c_int { +// return 1; +// } +// // pub fn initSsl(conn: ?*c_void, ?*c_void) callconv(.C) c_int +// // pub fn initSslDomain(conn: [*c]const u8, ?*c_void, ?*c_void) callconv(.C) c_int +// // pub fn externalSslCtx(ctx: [*c]?*c_void, ?*c_void) callconv(.C) c_int +// // pub fn externalSslCtxDomain(ctx: [*c]const u8, [*c]?*c_void, ?*c_void) callconv(.C) c_int +// // pub fn connectionClose(conn: ?*const c.struct_mg_connection) callconv(.C) void +// // pub fn connectionClosed(conn: ?*const c.struct_mg_connection) callconv(.C) void +// // pub fn initLua(conn: ?*const c.struct_mg_connection, ?*c_void, c_uint) callconv(.C) void +// // pub fn exitLua(conn: ?*const c.struct_mg_connection, ?*c_void, c_uint) callconv(.C) void +// pub fn httpError(conn: ?*c.struct_mg_connection, status: c_int, msg: [*c]const u8) callconv(.C) c_int { +// return 0; +// } +// pub fn handleCodeRequest(conn: ?*c.struct_mg_connection, cbdata: ?*c_void) c_int { +// var buf = "helloooo"; +// var buf_slice = buf[0.. :0]; +// // c.mg_write(conn, &buf_slice, buf_slice.len); +// c.mg_send_http_ok(conn, "text/plain", buf_slice.len); +// return 200; +// } +// pub fn initContext(ctx: *c.struct_mg_context) callconv(.C) void { +// c.mg_set_request_handler(ctx, "/_src/", &handleCodeRequest, null); +// } +// pub fn exitContext(ctx: *c.struct_mg_context) callconv(.C) void {} +// pub fn initThread(ctx: *c.struct_mg_context, thread_type: c_int) callconv(.C) ?*c_void {} +// pub fn exitThread(ctx: *c.struct_mg_context, thread_type: c_int, user_ptr: ?*c_void) callconv(.C) void {} + +// // pub fn initConnection(ctx: ?*const c.struct_mg_connection, [*c]?*c_void) callconv(.C) c_int { + +// // } + +// pub fn start() !void { +// // server. +// server.begin_request = &beginRequest; +// server.end_request = &endRequest; +// server.log_message = &logMessage; +// server.log_access = &logAccess; +// server.http_error = &httpError; +// server.init_context = &initContext; +// server.exit_context = &exitContext; +// server.init_thread = &initThread; +// server.exit_thread = &exitThread; +// const val = c.mg_init_library(c.MG_FEATURES_COMPRESSION); +// // callbacks.log_access +// var opts = [_:null][*c]const u8{ +// "listening_ports", +// "4086", +// "request_timeout_ms", +// "10000", +// "error_log_file", +// "error.log", +// "enable_auth_domain_check", +// "no", +// }; + +// c.mg_start(&server, 0, opts); +// } +// }; |