HabboPHP/src/Emulator/Messages/MessageHandler.php

40 lines
1.4 KiB
PHP

<?php
namespace Emulator\Messages;
use Emulator\Core\Logging\Logger;
use Emulator\Messages\Incoming\ClientMessage;
use Emulator\Messages\Incoming\Handshake\ReleaseVersionMessageEvent;
use Emulator\Messages\Incoming\Handshake\SecurityTicketMessageEvent;
use Emulator\Messages\Incoming\Header;
use Emulator\Messages\Incoming\IMessageEvent;
use Emulator\Network\Game\Sessions\Session;
use Emulator\Utilities\Dictionary;
use SplObjectStorage;
class MessageHandler {
private Dictionary $handlers;
public function __construct() {
$this->handlers = new Dictionary(IMessageEvent::class);
}
public function initialize(): void {
$this->handlers->add(Header::ReleaseVersion, new ReleaseVersionMessageEvent());
$this->handlers->add(Header::SecurityTicket, new SecurityTicketMessageEvent());
Logger::info("Loaded {$this->handlers->count()} message handlers");
}
public function handlePacket(Session $session, ClientMessage $request): void {
if (($header = Header::tryFrom($request->getHeader()))) {
if ($this->handlers->containsKey($header->value)) {
$this->handlers->get($header)->handle($session, $request);
} else {
Logger::warn("[{$request->getHeader()}] [$header->name] - Unregistered!");
}
} else {
Logger::warn("[{$request->getHeader()}] - Unregistered!");
}
}
}