login returns
This commit is contained in:
@@ -0,0 +1,74 @@
|
||||
<?php
|
||||
|
||||
require __DIR__ . "/../vendor/autoload.php";
|
||||
|
||||
use Ratchet\MessageComponentInterface;
|
||||
use Ratchet\ConnectionInterface;
|
||||
use Ratchet\Server\IoServer;
|
||||
use Ratchet\Http\HttpServer;
|
||||
use Ratchet\Http\Router;
|
||||
use Ratchet\WebSocket\WsServer;
|
||||
use Symfony\Component\Routing\RouteCollection;
|
||||
use Symfony\Component\Routing\Route;
|
||||
use Symfony\Component\Routing\RequestContext;
|
||||
use Symfony\Component\Routing\Matcher\UrlMatcher;
|
||||
use ComCen\Http\LoginController;
|
||||
use ComCen\Http\RegisterController;
|
||||
|
||||
class WebSocketServer 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) . " (One is you)");
|
||||
echo "New connection: {$conn->resourceId}\n";
|
||||
}
|
||||
|
||||
public function onMessage(ConnectionInterface $from, $msg): void
|
||||
{
|
||||
foreach ($this->connectedUsers as $conn) {
|
||||
if ($from->resourceId !== $conn->resourceId) {
|
||||
$conn->send("From user " . $from->resourceId . ": " . $msg);
|
||||
}
|
||||
}
|
||||
$from->send("Message sent to others");
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
$routes = new RouteCollection();
|
||||
$routes->add("login", new Route("/login", ["_controller" => new LoginController()]));
|
||||
$routes->add("register", new Route("/register", ["_controller" => new RegisterController()]));
|
||||
$routes->add("ws", new Route("/ws", ["_controller" => new WsServer(new WebSocketServer())]));
|
||||
|
||||
$server = IoServer::factory(
|
||||
new HttpServer(new Router(new UrlMatcher($routes, new RequestContext()))),
|
||||
8080,
|
||||
"0.0.0.0"
|
||||
);
|
||||
|
||||
echo "Server running on http://localhost:8080\n";
|
||||
|
||||
$server->run();
|
||||
Reference in New Issue
Block a user