Files
php-com-cen/bin/server.php
T
2026-03-05 09:51:40 +01:00

61 lines
1.6 KiB
PHP

<?php
require __DIR__ . '/../vendor/autoload.php';
use Ratchet\MessageComponentInterface;
use Ratchet\ConnectionInterface;
use Ratchet\Server\IoServer;
use Ratchet\Http\HttpServer;
use Ratchet\WebSocket\WsServer;
class TestServer implements MessageComponentInterface
{
private array $connectedUsers = [];
private function deleteGivenId(int $id): void
{
foreach ($this->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();