diff --git a/src/Server.zig b/src/Server.zig index 2901869..40713b4 100644 --- a/src/Server.zig +++ b/src/Server.zig @@ -1,12 +1,12 @@ const std = @import("std"); -const network = @import("network"); const Packet = @import("Packet.zig"); - -const Socket = network.Socket; -const Allocator = std.mem.Allocator; -const Atomic = std.atomic.Atomic; const Emulator = @import("lib.zig").Emulator; +const Atomic = std.atomic.Atomic; +const Allocator = std.mem.Allocator; +const Server = std.net.StreamServer; +const Connection = Server.Connection; + const Self = @This(); const log = std.log.scoped(.Server); const port: u16 = 2424; @@ -57,32 +57,24 @@ pub const memory_map: []const u8 = // FIXME: Shouldn't this be a Packet Struct? pkt_cache: ?[]const u8 = null, -client: Socket, -_socket: Socket, +server: Server, +client: Server.Connection, emu: Emulator, pub fn init(emulator: Emulator) !Self { - try network.init(); + var server = std.net.StreamServer.init(.{}); + server.listen(std.net.Address.initIp4([_]u8{0} ** 4, port)); - var socket = try Socket.create(.ipv4, .tcp); - try socket.bindToPort(port); - try socket.listen(); + var client = try server.accept(); + log.info("client connected from {}", .{client.address}); - var client = try socket.accept(); // TODO: This blocks, is this OK? - - const endpoint = try client.getLocalEndPoint(); - log.info("client connected from {}", .{endpoint}); - - return .{ .emu = emulator, ._socket = socket, .client = client }; + return .{ .emu = emulator, .server = server, .client = client }; } pub fn deinit(self: *Self, allocator: Allocator) void { self.reset(allocator); - - self.client.close(); - self._socket.close(); - network.deinit(); + self.server.deinit(); self.* = undefined; } @@ -99,7 +91,7 @@ pub fn run(self: *Self, allocator: Allocator, quit: *Atomic(bool)) !void { var buf: [Packet.max_len]u8 = undefined; while (true) { - const len = try self.client.receive(&buf); + const len = try self.client.stream.readAll(&buf); if (len == 0) break; if (quit.load(.Monotonic)) break; @@ -113,7 +105,7 @@ pub fn run(self: *Self, allocator: Allocator, quit: *Atomic(bool)) !void { } fn parse(self: *Self, allocator: Allocator, input: []const u8) !Action { - // log.debug("-> {s}", .{input}); + log.debug("-> {s}", .{input}); return switch (input[0]) { '+' => blk: { @@ -150,7 +142,7 @@ fn send(self: *Self, allocator: Allocator, action: Action) !void { switch (action) { .send => |pkt| { _ = try self.client.send(pkt); - // log.debug("<- {s}", .{pkt}); + log.debug("<- {s}", .{pkt}); self.reset(allocator); self.pkt_cache = pkt; @@ -160,18 +152,18 @@ fn send(self: *Self, allocator: Allocator, action: Action) !void { if (self.pkt_cache) |pkt| { _ = try self.client.send(pkt); - // log.debug("<- {s}", .{pkt}); + log.debug("<- {s}", .{pkt}); } }, .ack => { _ = try self.client.send("+"); - // log.debug("<- +", .{}); + log.debug("<- +", .{}); self.reset(allocator); }, .nack => { _ = try self.client.send("-"); - // log.debug("<- -", .{}); + log.debug("<- -", .{}); self.reset(allocator); },