Configuration fixes, makefile tweaks
* The PHAR now gets tagged with version and buildtime * WebSocket support can now be disabled
This commit is contained in:
@ -97,5 +97,16 @@ class Configuration
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function getEnableWebSockets(): bool
|
||||
{
|
||||
return (bool)($this->config['server.websockets']??false);
|
||||
}
|
||||
|
||||
public function setEnableWebSockets(bool $enable): self
|
||||
{
|
||||
$this->config['server.websockets'] = $enable;
|
||||
return $this;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
@ -2,7 +2,10 @@
|
||||
|
||||
namespace NoccyLabs\Mercureact;
|
||||
|
||||
use Monolog\Handler\StreamHandler;
|
||||
use Monolog\Logger;
|
||||
use NoccyLabs\Mercureact\Http\Server;
|
||||
use Psr\Log\LoggerInterface;
|
||||
use React\EventLoop\Loop;
|
||||
use React\EventLoop\LoopInterface;
|
||||
use React\Socket\SocketServer;
|
||||
@ -15,19 +18,33 @@ class Daemon
|
||||
|
||||
private Server $server;
|
||||
|
||||
private LoggerInterface $logger;
|
||||
|
||||
public function __construct(Configuration $config, ?LoopInterface $loop=null)
|
||||
{
|
||||
$this->config = $config;
|
||||
$this->loop = $loop??Loop::get();
|
||||
$this->logger = $this->createLogger();
|
||||
}
|
||||
|
||||
private function createLogger(): Logger
|
||||
{
|
||||
$handlers = [
|
||||
new StreamHandler(STDOUT)
|
||||
];
|
||||
$logger = new Logger("main", $handlers);
|
||||
return $logger;
|
||||
}
|
||||
|
||||
public function start(): void
|
||||
{
|
||||
$this->server = new Server($this->config, $this->loop);
|
||||
$this->server = new Server($this->config, $this->logger, $this->loop);
|
||||
|
||||
$this->logger->info("NoccyLabs Mercureact Daemon v".MERCUREACT_VERSION);
|
||||
|
||||
$listenAddress = $this->config->getListenAddress();
|
||||
if (!$listenAddress) {
|
||||
fwrite(STDERR, "Warning: Empty listening address. You won't make it far.\n");
|
||||
$this->logger->warning("Empty listening address. You won't make it far.");
|
||||
return;
|
||||
}
|
||||
$socket = new SocketServer("tcp://".$listenAddress);
|
||||
|
@ -13,9 +13,11 @@ use NoccyLabs\Mercureact\Http\Middleware\ResponseMiddleware;
|
||||
use NoccyLabs\Mercureact\Http\Middleware\SecurityMiddleware;
|
||||
use NoccyLabs\Mercureact\Http\Middleware\WebSocketHandler;
|
||||
use Psr\Log\LoggerInterface;
|
||||
use Psr\Log\NullLogger;
|
||||
use React\EventLoop\Loop;
|
||||
use React\EventLoop\LoopInterface;
|
||||
use React\Http\HttpServer;
|
||||
use React\Socket\SecureServer;
|
||||
use React\Socket\ServerInterface;
|
||||
use SplObjectStorage;
|
||||
|
||||
@ -45,13 +47,13 @@ class Server
|
||||
*
|
||||
*
|
||||
*/
|
||||
public function __construct(Configuration $config, ?LoopInterface $loop=null)
|
||||
public function __construct(Configuration $config, ?LoggerInterface $logger, ?LoopInterface $loop=null)
|
||||
{
|
||||
$this->loop = $loop??Loop::get();
|
||||
|
||||
$this->config = $config;
|
||||
|
||||
$this->logger = $this->createLogger();
|
||||
$this->logger = $logger ?? new NullLogger();
|
||||
|
||||
$this->topicManager = new TopicManager();
|
||||
$this->loop->addPeriodicTimer(30, function () {
|
||||
@ -70,17 +72,11 @@ class Server
|
||||
*/
|
||||
public function listen(ServerInterface $socket): void
|
||||
{
|
||||
$this->logger->info("Listening on ".$socket->getAddress()."\n");
|
||||
$this->server->listen($socket);
|
||||
}
|
||||
|
||||
private function createLogger(): Logger
|
||||
{
|
||||
$handlers = [
|
||||
new StreamHandler(STDOUT)
|
||||
];
|
||||
$logger = new Logger("main", $handlers);
|
||||
return $logger;
|
||||
$this->logger->info(sprintf(
|
||||
"Listening on %s",
|
||||
str_replace("tcp://",($socket instanceof SecureServer?"https://":"http://"),$socket->getAddress())
|
||||
));
|
||||
}
|
||||
|
||||
/**
|
||||
@ -89,7 +85,7 @@ class Server
|
||||
*/
|
||||
private function createHttpServer(): HttpServer
|
||||
{
|
||||
return new HttpServer(
|
||||
$stack = [
|
||||
$this->responseMiddleware = new ResponseMiddleware(
|
||||
config: $this->config,
|
||||
logger: $this->logger->withName("http"),
|
||||
@ -97,11 +93,18 @@ class Server
|
||||
$this->securityMiddleware = new SecurityMiddleware(
|
||||
config: $this->config
|
||||
),
|
||||
$this->webSocketHandler = new WebSocketHandler(
|
||||
config: $this->config,
|
||||
webSocketClients: $this->webSocketClients,
|
||||
topicManager: $this->topicManager
|
||||
),
|
||||
];
|
||||
if ($this->config->getEnableWebSockets()) {
|
||||
$stack = [ ...$stack,
|
||||
$this->webSocketHandler = new WebSocketHandler(
|
||||
config: $this->config,
|
||||
webSocketClients: $this->webSocketClients,
|
||||
topicManager: $this->topicManager
|
||||
),
|
||||
];
|
||||
$this->logger->warning("The WebSocket support is incomplete and insecure, but enabling it as requested.");
|
||||
}
|
||||
$stack = [ ...$stack,
|
||||
$this->mercureHandler = new MercureHandler(
|
||||
config: $this->config,
|
||||
topicManager: $this->topicManager
|
||||
@ -111,7 +114,9 @@ class Server
|
||||
topicManager: $this->topicManager
|
||||
),
|
||||
$this->notFoundHandler = new NotFoundHandler()
|
||||
);
|
||||
];
|
||||
|
||||
return new HttpServer(...$stack);
|
||||
}
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user