login returns
This commit is contained in:
Generated
+8
@@ -0,0 +1,8 @@
|
|||||||
|
# Default ignored files
|
||||||
|
/shelf/
|
||||||
|
/workspace.xml
|
||||||
|
# Editor-based HTTP Client requests
|
||||||
|
/httpRequests/
|
||||||
|
# Datasource local storage ignored files
|
||||||
|
/dataSources/
|
||||||
|
/dataSources.local.xml
|
||||||
Generated
+8
@@ -0,0 +1,8 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="ProjectModuleManager">
|
||||||
|
<modules>
|
||||||
|
<module fileurl="file://$PROJECT_DIR$/.idea/php-com-cen.iml" filepath="$PROJECT_DIR$/.idea/php-com-cen.iml" />
|
||||||
|
</modules>
|
||||||
|
</component>
|
||||||
|
</project>
|
||||||
Generated
+29
@@ -0,0 +1,29 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<module type="WEB_MODULE" version="4">
|
||||||
|
<component name="NewModuleRootManager">
|
||||||
|
<content url="file://$MODULE_DIR$">
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" packagePrefix="ComCen\" />
|
||||||
|
<excludeFolder url="file://$MODULE_DIR$/vendor/cboden/ratchet" />
|
||||||
|
<excludeFolder url="file://$MODULE_DIR$/vendor/composer" />
|
||||||
|
<excludeFolder url="file://$MODULE_DIR$/vendor/evenement/evenement" />
|
||||||
|
<excludeFolder url="file://$MODULE_DIR$/vendor/guzzlehttp/psr7" />
|
||||||
|
<excludeFolder url="file://$MODULE_DIR$/vendor/psr/http-factory" />
|
||||||
|
<excludeFolder url="file://$MODULE_DIR$/vendor/psr/http-message" />
|
||||||
|
<excludeFolder url="file://$MODULE_DIR$/vendor/ralouphie/getallheaders" />
|
||||||
|
<excludeFolder url="file://$MODULE_DIR$/vendor/ratchet/rfc6455" />
|
||||||
|
<excludeFolder url="file://$MODULE_DIR$/vendor/react/cache" />
|
||||||
|
<excludeFolder url="file://$MODULE_DIR$/vendor/react/dns" />
|
||||||
|
<excludeFolder url="file://$MODULE_DIR$/vendor/react/event-loop" />
|
||||||
|
<excludeFolder url="file://$MODULE_DIR$/vendor/react/promise" />
|
||||||
|
<excludeFolder url="file://$MODULE_DIR$/vendor/react/socket" />
|
||||||
|
<excludeFolder url="file://$MODULE_DIR$/vendor/react/stream" />
|
||||||
|
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/deprecation-contracts" />
|
||||||
|
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/http-foundation" />
|
||||||
|
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/polyfill-mbstring" />
|
||||||
|
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/polyfill-php83" />
|
||||||
|
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/routing" />
|
||||||
|
</content>
|
||||||
|
<orderEntry type="inheritedJdk" />
|
||||||
|
<orderEntry type="sourceFolder" forTests="false" />
|
||||||
|
</component>
|
||||||
|
</module>
|
||||||
Generated
+45
@@ -0,0 +1,45 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="MessDetectorOptionsConfiguration">
|
||||||
|
<option name="transferred" value="true" />
|
||||||
|
</component>
|
||||||
|
<component name="PHPCSFixerOptionsConfiguration">
|
||||||
|
<option name="transferred" value="true" />
|
||||||
|
</component>
|
||||||
|
<component name="PHPCodeSnifferOptionsConfiguration">
|
||||||
|
<option name="highlightLevel" value="WARNING" />
|
||||||
|
<option name="transferred" value="true" />
|
||||||
|
</component>
|
||||||
|
<component name="PhpIncludePathManager">
|
||||||
|
<include_path>
|
||||||
|
<path value="$PROJECT_DIR$/vendor/guzzlehttp/psr7" />
|
||||||
|
<path value="$PROJECT_DIR$/vendor/symfony/routing" />
|
||||||
|
<path value="$PROJECT_DIR$/vendor/symfony/deprecation-contracts" />
|
||||||
|
<path value="$PROJECT_DIR$/vendor/symfony/polyfill-mbstring" />
|
||||||
|
<path value="$PROJECT_DIR$/vendor/symfony/polyfill-php83" />
|
||||||
|
<path value="$PROJECT_DIR$/vendor/cboden/ratchet" />
|
||||||
|
<path value="$PROJECT_DIR$/vendor/symfony/http-foundation" />
|
||||||
|
<path value="$PROJECT_DIR$/vendor/composer" />
|
||||||
|
<path value="$PROJECT_DIR$/vendor/react/cache" />
|
||||||
|
<path value="$PROJECT_DIR$/vendor/react/stream" />
|
||||||
|
<path value="$PROJECT_DIR$/vendor/react/dns" />
|
||||||
|
<path value="$PROJECT_DIR$/vendor/react/promise" />
|
||||||
|
<path value="$PROJECT_DIR$/vendor/react/socket" />
|
||||||
|
<path value="$PROJECT_DIR$/vendor/psr/http-message" />
|
||||||
|
<path value="$PROJECT_DIR$/vendor/react/event-loop" />
|
||||||
|
<path value="$PROJECT_DIR$/vendor/evenement/evenement" />
|
||||||
|
<path value="$PROJECT_DIR$/vendor/psr/http-factory" />
|
||||||
|
<path value="$PROJECT_DIR$/vendor/ratchet/rfc6455" />
|
||||||
|
<path value="$PROJECT_DIR$/vendor/ralouphie/getallheaders" />
|
||||||
|
</include_path>
|
||||||
|
</component>
|
||||||
|
<component name="PhpProjectSharedConfiguration" php_language_level="7.4">
|
||||||
|
<option name="suggestChangeDefaultLanguageLevel" value="false" />
|
||||||
|
</component>
|
||||||
|
<component name="PhpStanOptionsConfiguration">
|
||||||
|
<option name="transferred" value="true" />
|
||||||
|
</component>
|
||||||
|
<component name="PsalmOptionsConfiguration">
|
||||||
|
<option name="transferred" value="true" />
|
||||||
|
</component>
|
||||||
|
</project>
|
||||||
Generated
+6
@@ -0,0 +1,6 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="VcsDirectoryMappings">
|
||||||
|
<mapping directory="" vcs="Git" />
|
||||||
|
</component>
|
||||||
|
</project>
|
||||||
@@ -1,14 +1,21 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
require __DIR__ . '/../vendor/autoload.php';
|
require __DIR__ . "/../vendor/autoload.php";
|
||||||
|
|
||||||
use Ratchet\MessageComponentInterface;
|
use Ratchet\MessageComponentInterface;
|
||||||
use Ratchet\ConnectionInterface;
|
use Ratchet\ConnectionInterface;
|
||||||
use Ratchet\Server\IoServer;
|
use Ratchet\Server\IoServer;
|
||||||
use Ratchet\Http\HttpServer;
|
use Ratchet\Http\HttpServer;
|
||||||
|
use Ratchet\Http\Router;
|
||||||
use Ratchet\WebSocket\WsServer;
|
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 TestServer implements MessageComponentInterface
|
class WebSocketServer implements MessageComponentInterface
|
||||||
{
|
{
|
||||||
private array $connectedUsers = [];
|
private array $connectedUsers = [];
|
||||||
|
|
||||||
@@ -24,18 +31,18 @@ class TestServer implements MessageComponentInterface
|
|||||||
public function onOpen(ConnectionInterface $conn): void
|
public function onOpen(ConnectionInterface $conn): void
|
||||||
{
|
{
|
||||||
$this->connectedUsers[] = $conn;
|
$this->connectedUsers[] = $conn;
|
||||||
$conn->send("Connected users: " . count($this->connectedUsers));
|
$conn->send("Connected users: " . count($this->connectedUsers) . " (One is you)");
|
||||||
echo "New connection: {$conn->resourceId}\n";
|
echo "New connection: {$conn->resourceId}\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
public function onMessage(ConnectionInterface $from, $msg): void
|
public function onMessage(ConnectionInterface $from, $msg): void
|
||||||
{
|
{
|
||||||
$from->send("Resending: $msg");
|
|
||||||
foreach ($this->connectedUsers as $conn) {
|
foreach ($this->connectedUsers as $conn) {
|
||||||
if ($from->resourceId !== $conn->resourceId) {
|
if ($from->resourceId !== $conn->resourceId) {
|
||||||
$conn->send("From user " . $from->resourceId . ": " . $msg);
|
$conn->send("From user " . $from->resourceId . ": " . $msg);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
$from->send("Message sent to others");
|
||||||
}
|
}
|
||||||
|
|
||||||
public function onClose(ConnectionInterface $conn): void
|
public function onClose(ConnectionInterface $conn): void
|
||||||
@@ -51,11 +58,17 @@ class TestServer implements MessageComponentInterface
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$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(
|
$server = IoServer::factory(
|
||||||
new HttpServer(new WsServer(new TestServer())),
|
new HttpServer(new Router(new UrlMatcher($routes, new RequestContext()))),
|
||||||
8080
|
8080,
|
||||||
|
"0.0.0.0"
|
||||||
);
|
);
|
||||||
|
|
||||||
echo "WebSocket server running on ws://localhost:8080\n";
|
echo "Server running on http://localhost:8080\n";
|
||||||
|
|
||||||
$server->run();
|
$server->run();
|
||||||
+2
-2
@@ -10,7 +10,7 @@ $html->content .= "
|
|||||||
<html lang=\"en\">
|
<html lang=\"en\">
|
||||||
<head>
|
<head>
|
||||||
<meta charset=\"UTF-8\">
|
<meta charset=\"UTF-8\">
|
||||||
<title>Ratchet Hello World</title>
|
<title>Chat</title>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<h2>WebSocket Test</h2>
|
<h2>WebSocket Test</h2>
|
||||||
@@ -21,7 +21,7 @@ $html->content .= "
|
|||||||
|
|
||||||
<script>
|
<script>
|
||||||
const log = document.getElementById('log');
|
const log = document.getElementById('log');
|
||||||
const ws = new WebSocket('ws://localhost:8080');
|
const ws = new WebSocket('ws://localhost:8080/ws');
|
||||||
|
|
||||||
ws.onopen = () => append('Connected');
|
ws.onopen = () => append('Connected');
|
||||||
ws.onmessage = e => append('Server: ' + e.data);
|
ws.onmessage = e => append('Server: ' + e.data);
|
||||||
|
|||||||
@@ -0,0 +1,35 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace ComCen\Http;
|
||||||
|
|
||||||
|
use Ratchet\ConnectionInterface;
|
||||||
|
use Ratchet\Http\HttpServerInterface;
|
||||||
|
use Psr\Http\Message\RequestInterface;
|
||||||
|
|
||||||
|
class LoginController implements HttpServerInterface
|
||||||
|
{
|
||||||
|
public function onOpen(ConnectionInterface $conn, RequestInterface $request = null): void
|
||||||
|
{
|
||||||
|
$params = [];
|
||||||
|
$json = "";
|
||||||
|
parse_str($request->getUri()->getQuery(), $params);
|
||||||
|
|
||||||
|
$username = $params["username"];
|
||||||
|
$password = $params["password"];
|
||||||
|
|
||||||
|
if (!$username || !$password) {
|
||||||
|
$json = json_encode(["error" => "Bad Credentials"]);
|
||||||
|
$conn->send("HTTP/1.1 400 Bad Request\r\nContent-Type: application/json\r\n\r\n{$json}");
|
||||||
|
$conn->close();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
$json = json_encode(["token" => "token"]);
|
||||||
|
$conn->send("HTTP/1.1 200 OK\r\nContent-Type: application/json\r\n\r\n{$json}");
|
||||||
|
$conn->close();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function onMessage(ConnectionInterface $from, $msg): void {}
|
||||||
|
public function onClose(ConnectionInterface $conn): void {}
|
||||||
|
public function onError(ConnectionInterface $conn, \Exception $e): void { $conn->close(); }
|
||||||
|
}
|
||||||
@@ -0,0 +1,35 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace ComCen\Http;
|
||||||
|
|
||||||
|
use Ratchet\ConnectionInterface;
|
||||||
|
use Ratchet\Http\HttpServerInterface;
|
||||||
|
use Psr\Http\Message\RequestInterface;
|
||||||
|
|
||||||
|
class RegisterController implements HttpServerInterface
|
||||||
|
{
|
||||||
|
public function onOpen(ConnectionInterface $conn, RequestInterface $request = null): void
|
||||||
|
{
|
||||||
|
$params = [];
|
||||||
|
$json = "";
|
||||||
|
parse_str($request->getUri()->getQuery(), $params);
|
||||||
|
|
||||||
|
$username = $params["username"];
|
||||||
|
$password = $params["password"];
|
||||||
|
|
||||||
|
if (!$username || !$password) {
|
||||||
|
$json = json_encode(["error" => "Bad Credentials"]);
|
||||||
|
$conn->send("HTTP/1.1 400 Bad Request\r\nContent-Type: application/json\r\n\r\n{$json}");
|
||||||
|
$conn->close();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
$json = json_encode(["token" => "token"]);
|
||||||
|
$conn->send("HTTP/1.1 200 OK\r\nContent-Type: application/json\r\n\r\n{$json}");
|
||||||
|
$conn->close();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function onMessage(ConnectionInterface $from, $msg): void {}
|
||||||
|
public function onClose(ConnectionInterface $conn): void {}
|
||||||
|
public function onError(ConnectionInterface $conn, \Exception $e): void { $conn->close(); }
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user