diff --git a/build.zig b/build.zig index a08a760..3141ec0 100644 --- a/build.zig +++ b/build.zig @@ -2,7 +2,6 @@ const std = @import("std"); pub fn build(b: *std.Build) void { const target = b.standardTargetOptions(.{}); - const optimize = b.standardOptimizeOption(.{}); const enet_real = b.dependency("enet_real", .{}); @@ -11,6 +10,7 @@ pub fn build(b: *std.Build) void { .target = target, .optimize = optimize, .link_libc = true, + .sanitize_c = false, }); enet.addCSourceFiles(.{ .root = enet_real.path(""), @@ -30,7 +30,7 @@ pub fn build(b: *std.Build) void { const client = b.addExecutable(.{ .name = "client", - .root_source_file = .{ .path = "src/main.zig" }, + .root_source_file = .{ .path = "src/client.zig" }, .target = target, .optimize = optimize, }); @@ -39,7 +39,7 @@ pub fn build(b: *std.Build) void { const server = b.addExecutable(.{ .name = "server", - .root_source_file = .{ .path = "src/main.zig" }, + .root_source_file = .{ .path = "src/server.zig" }, .target = target, .optimize = optimize, }); @@ -66,13 +66,13 @@ pub fn build(b: *std.Build) void { .target = target, .optimize = optimize, }); - client.root_module.addImport("enet", enet); + client_tests.root_module.addImport("enet", enet); const server_tests = b.addTest(.{ .root_source_file = .{ .path = "src/server.zig" }, .target = target, .optimize = optimize, }); - server.root_module.addImport("enet", enet); + server_tests.root_module.addImport("enet", enet); const run_client_tests = b.addRunArtifact(client_tests); const run_server_tests = b.addRunArtifact(server_tests); diff --git a/src/client.zig b/src/client.zig index 311c590..33a457b 100644 --- a/src/client.zig +++ b/src/client.zig @@ -8,6 +8,36 @@ const SHA = std.crypto.hash.sha2.Sha256; pub fn main() !void { if (enet.enet_initialize() != 0) return error.ENetInitFailed; defer enet.enet_deinitialize(); + + const addr = enet.ENetAddress{ + .host = enet.ENET_HOST_ANY, + .port = enet.ENET_PORT_ANY, + }; + const host = enet.enet_host_create(&addr, 32, 1, 0, 0) orelse return error.ENetHostCreateFailed; + defer enet.enet_host_destroy(host); + + var server_addr = enet.ENetAddress{ + .host = enet.ENET_HOST_ANY, + .port = 9405, + }; + _ = enet.enet_address_set_host(&server_addr, "localhost"); + const peer = enet.enet_host_connect(host, &server_addr, 1, 0); + _ = peer; + + var event: enet.ENetEvent = undefined; + + while (true) { + while (enet.enet_host_service(host, &event, 100) > 0) { + switch (event.type) { + enet.ENET_EVENT_TYPE_CONNECT => { + std.debug.print("client: connected to peer {any}\n", .{event.peer.*.address}); + }, + else => { + std.debug.print("client: other event...\n", .{}); + }, + } + } + } } // it even works in ReleaseFast so I think it's ok. diff --git a/src/enet.zig b/src/enet.zig index aad6c70..016ab6d 100644 --- a/src/enet.zig +++ b/src/enet.zig @@ -1,3 +1,5 @@ +const c = @This(); + pub usingnamespace @cImport({ @cInclude("enet/enet.h"); }); diff --git a/src/server.zig b/src/server.zig index 311c590..4ed311e 100644 --- a/src/server.zig +++ b/src/server.zig @@ -8,6 +8,28 @@ const SHA = std.crypto.hash.sha2.Sha256; pub fn main() !void { if (enet.enet_initialize() != 0) return error.ENetInitFailed; defer enet.enet_deinitialize(); + + const addr = enet.ENetAddress{ + .host = enet.ENET_HOST_ANY, + .port = 9405, + }; + const host = enet.enet_host_create(&addr, 32, 1, 0, 0) orelse return error.ENetHostCreateFailed; + defer enet.enet_host_destroy(host); + + var event: enet.ENetEvent = undefined; + + while (true) { + while (enet.enet_host_service(host, &event, 100) > 0) { + switch (event.type) { + enet.ENET_EVENT_TYPE_CONNECT => { + std.debug.print("server: connected to peer {any}\n", .{event.peer.*.address}); + }, + else => { + std.debug.print("server: other event...\n", .{}); + }, + } + } + } } // it even works in ReleaseFast so I think it's ok.