From c5c9c6612d771afc66f2759d1cb0e605d9a71b7c Mon Sep 17 00:00:00 2001 From: Trinity Bee Date: Thu, 17 Sep 2026 05:54:00 +0000 Subject: [PATCH] Implement server_remove_client function and add test Closes #3969 --- specs/server/sse.t27 | 40 +++++++++++++++++++++++++++++++++++----- 1 file changed, 35 insertions(+), 5 deletions(-) diff --git a/specs/server/sse.t27 b/specs/server/sse.t27 index c7da6d95f6..f4c04467f7 100644 --- a/specs/server/sse.t27 +++ b/specs/server/sse.t27 @@ -124,10 +124,10 @@ pub fn connection_new(url: []u8) SSEConnection { pub fn client_new(url: []u8) SSEClient { return SSEClient{ .connection = connection_new(url), - .on_message = fn(e: SSEEvent) void { }, - .on_error = fn(msg: []u8) void { }, - .on_open = fn() void { }, - .on_close = fn(code: SSECloseCode, msg: []u8) void { }, + .on_message = null, + .on_error = null, + .on_open = null, + .on_close = null, }; } @@ -275,7 +275,11 @@ pub fn server_add_client(server: *SEServer, client: SSEClient) void { /// Remove client from server pub fn server_remove_client(server: *SEServer, client_index: usize) void { - // Remove at index (simplified) + if (client_index < server.clients.len) { + var before : []SSEClient = server.clients[0..client_index]; + var after : []SSEClient = server.clients[client_index + 1 ..]; + server.clients = before ++ after; + } } /// Send event to all clients @@ -393,6 +397,32 @@ test "sse_int_to_string_positive" { try std.testing.expect(std.mem.eql(result, "42")); } +test "sse_server_remove_client" { + var server = SEServer{ + .clients = &[_]SSEClient{}, + .heartbeat_interval_ms = HEARTBEAT_INTERVAL_MS, + }; + + const client1 = client_new("http://localhost/events1"); + const client2 = client_new("http://localhost/events2"); + const client3 = client_new("http://localhost/events3"); + + server_add_client(&server, client1); + server_add_client(&server, client2); + server_add_client(&server, client3); + + try std.testing.expect(server.clients.len == 3); + + server_remove_client(&server, 1); + try std.testing.expect(server.clients.len == 2); + + server_remove_client(&server, 0); + try std.testing.expect(server.clients.len == 1); + + server_remove_client(&server, 0); + try std.testing.expect(server.clients.len == 0); +} + // ============================================================================ // TDD - Invariants // ============================================================================