From 01144b2bd4e22ab33d3c9321234a9a9ea775de70 Mon Sep 17 00:00:00 2001 From: Vicente Ferrari Smith Date: Tue, 6 Jan 2026 16:36:11 +0100 Subject: [PATCH] ... --- src/client/client.zig | 26 ++++++++++++++++++++++++++ src/server/chunk.zig | 30 ++++++++++++++++++++++++++++++ src/server/server.zig | 3 +++ 3 files changed, 59 insertions(+) create mode 100644 src/client/client.zig create mode 100644 src/server/chunk.zig create mode 100644 src/server/server.zig diff --git a/src/client/client.zig b/src/client/client.zig new file mode 100644 index 0000000..580a856 --- /dev/null +++ b/src/client/client.zig @@ -0,0 +1,26 @@ +const std = @import("std"); + +const ConnectState = union(enum) { + disconnected, + connecting, + connected: std.net.Stream, + err: anyerror, +}; + +const Client = struct { + state: ConnectState = .disconnected, + + pub fn startConnect(self: *Client, addr: std.net.Address) void { + if (self.state == .connecting or self.state == .connected) + return; + + self.state = .connecting; + + const stream = std.net.tcpConnectToAddress(addr) catch |err| { + self.state = .{ .err = err }; + return; + }; + + self.state = .{ .connected = stream }; + } +}; diff --git a/src/server/chunk.zig b/src/server/chunk.zig new file mode 100644 index 0000000..091d703 --- /dev/null +++ b/src/server/chunk.zig @@ -0,0 +1,30 @@ +const std = @import("std"); +const shared = @import("shared"); +const server = @import("server.zig"); + +pub fn spawn(chunk: *shared.chunk.Chunk(), comptime T: type, allocator: std.mem.Allocator, value: T, w: *std.Io.Writer) !void { + const id = server.next_entity_id; + server.next_entity_id += 1; + + var entity = value; + entity.id = id; + + inline for (@typeInfo(shared.chunk.Chunk()).@"struct".fields) |field| { + if (field.type == shared.chunk.Storage(T)) { + try @field(chunk, field.name).items.append(allocator, entity); + return; + } + } + + // serialize entity + var buffer: [64]u8 = undefined; + var fbs = std.io.fixedBufferStream(&buffer); + try T.encode(entity, fbs.writer()); + + try shared.protocol.write_message( + w, + .spawn_entity, + fbs.getWritten(), + ); + try w.flush(); +} diff --git a/src/server/server.zig b/src/server/server.zig new file mode 100644 index 0000000..a46a541 --- /dev/null +++ b/src/server/server.zig @@ -0,0 +1,3 @@ +const shared = @import("shared"); + +pub var next_entity_id: shared.entity.entity_id = 1;