40 lines
1.4 KiB
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!");
|
|
}
|
|
}
|
|
} |