Logfiles for sessions
This commit is contained in:
30
src/Game/Controller/GameAdminController.php
Normal file
30
src/Game/Controller/GameAdminController.php
Normal file
@@ -0,0 +1,30 @@
|
||||
<?php
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace App\Game\Controller;
|
||||
|
||||
use App\Game\Repository\SessionRepository;
|
||||
use App\Tech\Repository\UserRepository;
|
||||
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
|
||||
use Symfony\Component\HttpFoundation\Response;
|
||||
use Symfony\Component\Routing\Annotation\Route;
|
||||
use Symfony\Component\Security\Http\Attribute\IsGranted;
|
||||
|
||||
#[Route('/admin')]
|
||||
#[IsGranted('ROLE_ADMIN')]
|
||||
final class GameAdminController extends AbstractController
|
||||
{
|
||||
#[Route('', name: 'game_admin_dashboard', methods: ['GET'])]
|
||||
public function index(
|
||||
UserRepository $userRepository,
|
||||
SessionRepository $sessionRepository
|
||||
): Response {
|
||||
$players = $userRepository->findByRole('ROLE_PLAYER');
|
||||
$sessions = $sessionRepository->findAll();
|
||||
|
||||
return $this->render('game/admin/index.html.twig', [
|
||||
'players' => $players,
|
||||
'sessions' => $sessions,
|
||||
]);
|
||||
}
|
||||
}
|
||||
@@ -21,6 +21,7 @@ class GameResponseService
|
||||
private SessionSettingRepository $sessionSettingRepository,
|
||||
private HubInterface $hub,
|
||||
private EntityManagerInterface $entityManager,
|
||||
private string $projectDir,
|
||||
) {
|
||||
}
|
||||
|
||||
@@ -44,7 +45,7 @@ class GameResponseService
|
||||
if(!$player)
|
||||
return ['error' => 'You are not in a game.'];
|
||||
|
||||
// TODO: Here i need to add a message handler to save the message in a big log.
|
||||
$this->logSessionActivity($player, 'PLAYER: ' . $message);
|
||||
|
||||
$data = [];
|
||||
|
||||
@@ -54,9 +55,43 @@ class GameResponseService
|
||||
$data = $this->checkConsoleCommando($message, $player);
|
||||
}
|
||||
|
||||
$responseLog = '';
|
||||
if (isset($data['result']) && is_array($data['result'])) {
|
||||
foreach ($data['result'] as $line) {
|
||||
if (is_array($line)) {
|
||||
$responseLog .= json_encode($line) . "\n";
|
||||
} elseif (is_string($line) || is_numeric($line)) {
|
||||
$responseLog .= (string)$line . "\n";
|
||||
}
|
||||
}
|
||||
} elseif (isset($data['error'])) {
|
||||
$responseLog = 'ERROR: ' . $data['error'];
|
||||
}
|
||||
|
||||
if ($responseLog !== '') {
|
||||
$this->logSessionActivity($player, 'SERVER: ' . trim($responseLog));
|
||||
}
|
||||
|
||||
return $data;
|
||||
}
|
||||
|
||||
private function logSessionActivity(Player $player, string $content): void
|
||||
{
|
||||
$sessionId = $player->getSession()->getId();
|
||||
$username = $player->getUser()->getUsername();
|
||||
$logDir = $this->projectDir . '/var/log/sessions/' . $sessionId;
|
||||
|
||||
if (!is_dir($logDir)) {
|
||||
mkdir($logDir, 0777, true);
|
||||
}
|
||||
|
||||
$logFile = $logDir . '/' . $username . '.txt';
|
||||
$timestamp = date('Y-m-d H:i:s');
|
||||
$logMessage = sprintf("[%s] %s\n", $timestamp, $content);
|
||||
|
||||
file_put_contents($logFile, $logMessage, FILE_APPEND);
|
||||
}
|
||||
|
||||
private function getRechten(Player $player): array
|
||||
{
|
||||
$settingName = SessionSettingType::tryFrom('RightsForPlayer' . $player->getScreen());
|
||||
|
||||
Reference in New Issue
Block a user