From 8ba0ebd84c74f37fcfb0e1b16f662a293e9f635a Mon Sep 17 00:00:00 2001 From: jaina heartles Date: Sun, 26 Jun 2022 00:00:14 -0700 Subject: [PATCH] Move connection to conn.zig --- src/http/conn.zig | 33 +++++++++++++++++++++++++++++++++ src/http/lib.zig | 9 ++++++--- src/http/server.zig | 30 +----------------------------- 3 files changed, 40 insertions(+), 32 deletions(-) create mode 100644 src/http/conn.zig diff --git a/src/http/conn.zig b/src/http/conn.zig new file mode 100644 index 0000000..505ab7e --- /dev/null +++ b/src/http/conn.zig @@ -0,0 +1,33 @@ +const std = @import("std"); + +pub const Connection = struct { + pub const Id = u64; + + id: Id, + address: std.net.Address, + stream: std.net.Stream, +}; + +pub const ConnectionServer = struct { + pub const Handler = fn (Connection) callconv(.Async) void; + + alloc: std.mem.Allocator, + next_conn_id: std.atomic.Atomic(Connection.Id) = std.atomic.Atomic(Connection.Id).init(1), + handler: Handler, + + // todo accept is a bad name + pub fn accept(self: *ConnectionServer, stream: std.net.Stream, address: std.net.Address) void { + const conn = Connection{ + .id = self.next_conn_id.fetchAdd(1, .SeqCst), + .address = address, + .stream = stream, + }; + + defer conn.stream.close(); + std.log.debug("new connection conn_id={}", .{conn.id}); + + async self.handler(conn); + + std.log.debug("terminating connection conn_id={}", .{conn.id}); + } +}; diff --git a/src/http/lib.zig b/src/http/lib.zig index bb7279e..95d43c8 100644 --- a/src/http/lib.zig +++ b/src/http/lib.zig @@ -1,14 +1,16 @@ const std = @import("std"); const ciutf8 = @import("util").ciutf8; +const conn = @import("./conn.zig"); +const response_stream = @import("./response_stream.zig"); const routing = @import("./routing.zig"); const server = @import("./server.zig"); -const response_stream = @import("./response_stream.zig"); -pub const Status = std.http.Status; +pub const Connection = conn.Connection; pub const Method = std.http.Method; pub const ResponseStream = response_stream.ResponseStream; //pub const Router = routing.Router(Context); +pub const Status = std.http.Status; pub const Headers = std.HashMap([]const u8, []const u8, struct { pub fn eql(_: @This(), a: []const u8, b: []const u8) bool { @@ -28,7 +30,8 @@ pub const Request = struct { }; test { - _ = ResponseStream; + _ = conn; + _ = response_stream; _ = routing; _ = server; } diff --git a/src/http/server.zig b/src/http/server.zig index a464846..1834628 100644 --- a/src/http/server.zig +++ b/src/http/server.zig @@ -2,38 +2,10 @@ const std = @import("std"); const util = @import("util"); const http = @import("./lib.zig"); -const Address = std.net.Address; +const Connection = http.Connection; const Method = http.Method; const Request = http.Request; const Headers = http.Headers; -const Id = u64; - -const Connection = struct { - id: Id, - address: Address, - stream: std.net.Stream, -}; - -const ConnectionServer = struct { - alloc: std.mem.Allocator, - next_conn_id: std.atomic.Atomic(Id) = std.atomic.Atomic(Id).init(1), - - // todo accept is a bad name - fn accept(self: *ConnectionServer, stream: std.net.Stream, address: Address) void { - const conn = Connection{ - .id = self.next_conn_id.fetchAdd(1, .SeqCst), - .address = address, - .stream = stream, - }; - - defer conn.stream.close(); - std.log.debug("new connection conn_id={}", .{conn.id}); - - async handleConnection(conn); - - std.log.debug("terminating connection conn_id={}", .{conn.id}); - } -}; const request_buf_size = 1 << 16; const max_path_len = 1 << 10;