connectedUsers as $key => $conn) { if ($conn->resourceId === $id) { unset($this->connectedUsers[$key]); return; } } } public function onOpen(ConnectionInterface $conn): void { $this->connectedUsers[] = $conn; $conn->send("Connected users: " . count($this->connectedUsers)); echo "New connection: {$conn->resourceId}\n"; } public function onMessage(ConnectionInterface $from, $msg): void { $from->send("Resending: $msg"); foreach ($this->connectedUsers as $conn) { if ($from->resourceId !== $conn->resourceId) { $conn->send("From user " . $from->resourceId . ": " . $msg); } } } public function onClose(ConnectionInterface $conn): void { $this->deleteGivenId($conn->resourceId); echo "Connection {$conn->resourceId} closed\n"; } public function onError(ConnectionInterface $conn, \Exception $e): void { echo "Error: {$e->getMessage()}\n"; $this->onClose($conn); } } $server = IoServer::factory( new HttpServer(new WsServer(new TestServer())), 8080 ); echo "WebSocket server running on ws://localhost:8080\n"; $server->run();