mirror of
https://github.com/YGGverse/HLState.git
synced 2026-03-31 17:15:39 +00:00
implement separated server pages, replace hlservers to masters tracking
This commit is contained in:
parent
6f760e8ac7
commit
dc0048d32d
15 changed files with 795 additions and 484 deletions
|
|
@ -11,6 +11,8 @@ use Symfony\Component\HttpFoundation\Request;
|
|||
|
||||
use App\Entity\Online;
|
||||
use App\Entity\Player;
|
||||
use App\Entity\Server;
|
||||
|
||||
use Doctrine\ORM\EntityManagerInterface;
|
||||
|
||||
class CrontabController extends AbstractController
|
||||
|
|
@ -25,37 +27,133 @@ class CrontabController extends AbstractController
|
|||
)]
|
||||
public function index(
|
||||
?Request $request,
|
||||
TranslatorInterface $translatorInterface,
|
||||
EntityManagerInterface $entityManagerInterface
|
||||
): Response
|
||||
{
|
||||
// Get HLServers config
|
||||
if ($hlservers = file_get_contents($this->getParameter('app.hlservers')))
|
||||
// Prevent multi-thread execution
|
||||
$semaphore = sem_get(
|
||||
crc32(
|
||||
__DIR__ . '.controller.crontab.index',
|
||||
), 1
|
||||
);
|
||||
|
||||
if (false === sem_acquire($semaphore, true))
|
||||
{
|
||||
$hlservers = json_decode($hlservers);
|
||||
return new Response(
|
||||
$translatorInterface->trans('Process locked by another thread')
|
||||
);
|
||||
}
|
||||
|
||||
else
|
||||
// Get new servers from masters
|
||||
foreach ((array) explode(',', $this->getParameter('app.masters')) as $master)
|
||||
{
|
||||
$hlservers = [];
|
||||
if (!$host = parse_url($master, PHP_URL_HOST)) // @TODO IPv6 https://bugs.php.net/bug.php?id=72811
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!$port = parse_url($master, PHP_URL_PORT))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
// Connect master node
|
||||
$node = new \Yggverse\Hl\Xash3D\Master($host, $port, 1);
|
||||
|
||||
foreach ((array) $node->getServersIPv6() as $key => $value)
|
||||
{
|
||||
// Generate server identity
|
||||
$crc32server = crc32(
|
||||
$key
|
||||
);
|
||||
|
||||
// Check server does not exist yet
|
||||
$server = $entityManagerInterface->getRepository(Server::class)->findOneBy(
|
||||
[
|
||||
'crc32server' => $crc32server
|
||||
]
|
||||
);
|
||||
|
||||
// Server exist, just update
|
||||
if ($server)
|
||||
{
|
||||
$server->setUpdated(
|
||||
time()
|
||||
);
|
||||
|
||||
$server->setOnline(
|
||||
time()
|
||||
);
|
||||
|
||||
$entityManagerInterface->persist(
|
||||
$server
|
||||
);
|
||||
|
||||
$entityManagerInterface->flush();
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
// Server does not exist, create new record
|
||||
$server = new Server();
|
||||
|
||||
$server->setCrc32server(
|
||||
$crc32server
|
||||
);
|
||||
|
||||
$server->setHost(
|
||||
$value['host']
|
||||
);
|
||||
|
||||
$server->setPort(
|
||||
$value['port']
|
||||
);
|
||||
|
||||
$server->setAdded(
|
||||
time()
|
||||
);
|
||||
|
||||
$server->setUpdated(
|
||||
time()
|
||||
);
|
||||
|
||||
$server->setOnline(
|
||||
time()
|
||||
);
|
||||
|
||||
$entityManagerInterface->persist(
|
||||
$server
|
||||
);
|
||||
|
||||
$entityManagerInterface->flush();
|
||||
}
|
||||
}
|
||||
|
||||
// Collect servers info
|
||||
$servers = [];
|
||||
|
||||
foreach ($hlservers as $hlserver)
|
||||
foreach ((array) $entityManagerInterface->getRepository(Server::class)->findBy(
|
||||
[
|
||||
'crc32server' => (int) $request->get('crc32server')
|
||||
],
|
||||
[
|
||||
'id' => 'ASC'
|
||||
],
|
||||
) as $server)
|
||||
{
|
||||
try
|
||||
{
|
||||
$server = new \xPaw\SourceQuery\SourceQuery();
|
||||
$query = new \xPaw\SourceQuery\SourceQuery();
|
||||
|
||||
$server->Connect(
|
||||
$hlserver->host,
|
||||
$hlserver->port
|
||||
$query->Connect(
|
||||
false === filter_var($server->getHost(), FILTER_VALIDATE_IP, FILTER_FLAG_IPV6) ? $server->getHost() : "[{$server->getHost()}]",
|
||||
$server->port
|
||||
);
|
||||
|
||||
if ($server->Ping())
|
||||
if ($query->Ping())
|
||||
{
|
||||
if ($info = (array) $server->GetInfo())
|
||||
if ($info = (array) $query->GetInfo())
|
||||
{
|
||||
// Filter response
|
||||
$bots = isset($info['Bots']) && $info['Bots'] > 0 ? (int) $info['Bots'] : 0;
|
||||
|
|
@ -64,7 +162,7 @@ class CrontabController extends AbstractController
|
|||
|
||||
// Generate CRC32 server ID
|
||||
$crc32server = crc32(
|
||||
$hlserver->host . ':' . $hlserver->port
|
||||
$server->host . ':' . $server->port
|
||||
);
|
||||
|
||||
// Get last online value
|
||||
|
|
@ -121,7 +219,7 @@ class CrontabController extends AbstractController
|
|||
// Update player stats
|
||||
if ($players)
|
||||
{
|
||||
foreach ((array) $server->GetPlayers() as $session)
|
||||
foreach ((array) $query->GetPlayers() as $session)
|
||||
{
|
||||
// Validate fields
|
||||
if
|
||||
|
|
@ -231,7 +329,7 @@ class CrontabController extends AbstractController
|
|||
|
||||
finally
|
||||
{
|
||||
$server->Disconnect();
|
||||
$query->Disconnect();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -11,6 +11,8 @@ use Symfony\Component\HttpFoundation\Request;
|
|||
|
||||
use App\Entity\Online;
|
||||
use App\Entity\Player;
|
||||
use App\Entity\Server;
|
||||
|
||||
use Doctrine\ORM\EntityManagerInterface;
|
||||
|
||||
class MainController extends AbstractController
|
||||
|
|
@ -28,139 +30,56 @@ class MainController extends AbstractController
|
|||
EntityManagerInterface $entityManagerInterface
|
||||
): Response
|
||||
{
|
||||
// Prepare request
|
||||
if ('online' == $request->get('sort') && in_array($request->get('field'), ['time','players','bots','total']))
|
||||
{
|
||||
$field = $request->get('field');
|
||||
}
|
||||
|
||||
else if ('players' == $request->get('sort') && in_array($request->get('field'), ['name','frags','joined','online']))
|
||||
{
|
||||
$field = $request->get('field');
|
||||
}
|
||||
|
||||
else
|
||||
{
|
||||
$field = 'time';
|
||||
}
|
||||
|
||||
if (in_array($request->get('order'), ['asc','desc']))
|
||||
{
|
||||
$order = $request->get('order');
|
||||
}
|
||||
|
||||
else
|
||||
{
|
||||
$order = 'desc';
|
||||
}
|
||||
|
||||
// Get HLServers config
|
||||
if ($hlservers = file_get_contents($this->getParameter('app.hlservers')))
|
||||
{
|
||||
$hlservers = json_decode($hlservers);
|
||||
}
|
||||
|
||||
else
|
||||
{
|
||||
$hlservers = [];
|
||||
}
|
||||
|
||||
// Collect servers info
|
||||
$servers = [];
|
||||
|
||||
foreach ($hlservers as $hlserver)
|
||||
foreach ((array) $entityManagerInterface->getRepository(Server::class)->findAll() as $server)
|
||||
{
|
||||
// Init defaults
|
||||
$info = [];
|
||||
$session = [];
|
||||
$online = [];
|
||||
$players = [];
|
||||
$status = false;
|
||||
|
||||
// Generate CRC32 ID
|
||||
$crc32server = crc32(
|
||||
$hlserver->host . ':' . $hlserver->port
|
||||
);
|
||||
|
||||
// Prepare aliases
|
||||
$aliases = [];
|
||||
|
||||
foreach ($hlserver->alias as $value)
|
||||
{
|
||||
$alias = new \xPaw\SourceQuery\SourceQuery();
|
||||
|
||||
$alias->Connect(
|
||||
$value->host,
|
||||
$value->port
|
||||
);
|
||||
|
||||
$aliases[] = [
|
||||
'host' => $value->host,
|
||||
'port' => $value->port,
|
||||
'status' => $alias->Ping()
|
||||
];
|
||||
}
|
||||
$info =
|
||||
[
|
||||
'Protocol' => null,
|
||||
'HostName' => null,
|
||||
'Map' => null,
|
||||
'ModDir' => null,
|
||||
'ModDesc' => null,
|
||||
'AppID' => null,
|
||||
'Players' => null,
|
||||
'MaxPlayers' => null,
|
||||
'Bots' => null,
|
||||
'Dedicated' => null,
|
||||
'Os' => null,
|
||||
'Password' => null,
|
||||
'Secure' => null,
|
||||
'Version' => null
|
||||
];
|
||||
|
||||
// Request server info
|
||||
try
|
||||
{
|
||||
$server = new \xPaw\SourceQuery\SourceQuery();
|
||||
$node = new \xPaw\SourceQuery\SourceQuery();
|
||||
|
||||
$server->Connect(
|
||||
$hlserver->host,
|
||||
$hlserver->port
|
||||
$node->Connect(
|
||||
false === filter_var($server->getHost(), FILTER_VALIDATE_IP, FILTER_FLAG_IPV6) ? $server->getHost() : "[{$server->getHost()}]",
|
||||
$server->getPort()
|
||||
);
|
||||
|
||||
if ($server->Ping())
|
||||
if ($node->Ping())
|
||||
{
|
||||
if ($info = (array) $server->GetInfo())
|
||||
{
|
||||
// Get session
|
||||
$session = empty($info['Players']) ? [] : (array) $server->GetPlayers();
|
||||
|
||||
// Sort by players by frags
|
||||
if ($session)
|
||||
{
|
||||
array_multisort(
|
||||
array_column(
|
||||
$session,
|
||||
'Frags'
|
||||
),
|
||||
SORT_DESC,
|
||||
$session
|
||||
);
|
||||
}
|
||||
|
||||
// Get online
|
||||
$online = $entityManagerInterface->getRepository(Online::class)->findBy(
|
||||
[
|
||||
'crc32server' => $crc32server
|
||||
],
|
||||
'online' == $request->get('sort') && $crc32server == $request->get('crc32server') ? [$field => $order] : ['time' => 'DESC'],
|
||||
10
|
||||
);
|
||||
|
||||
// Get players
|
||||
$players = $entityManagerInterface->getRepository(Player::class)->findBy(
|
||||
[
|
||||
'crc32server' => $crc32server
|
||||
],
|
||||
'players' == $request->get('sort') && $crc32server == $request->get('crc32server') ? [$field => $order] : ['frags' => 'DESC'],
|
||||
10
|
||||
);
|
||||
}
|
||||
|
||||
$status = true;
|
||||
}
|
||||
|
||||
else
|
||||
{
|
||||
$status = false;
|
||||
foreach ((array) $node->GetInfo() as $key => $value)
|
||||
{
|
||||
$info[$key] = $value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
catch (Exception $error)
|
||||
{
|
||||
continue;
|
||||
throw $this->createNotFoundException();
|
||||
}
|
||||
|
||||
catch (\Throwable $error)
|
||||
|
|
@ -170,20 +89,18 @@ class MainController extends AbstractController
|
|||
|
||||
finally
|
||||
{
|
||||
$server->Disconnect();
|
||||
$node->Disconnect();
|
||||
}
|
||||
|
||||
// Add server
|
||||
$servers[] = [
|
||||
'crc32server' => $crc32server,
|
||||
'host' => $hlserver->host,
|
||||
'port' => $hlserver->port,
|
||||
'description' => $hlserver->description,
|
||||
'aliases' => $aliases,
|
||||
'crc32server' => $server->getCrc32server(),
|
||||
'host' => $server->getHost(),
|
||||
'port' => $server->getPort(),
|
||||
'added' => $server->getAdded(),
|
||||
'updated' => $server->getUpdated(),
|
||||
'online' => $server->getOnline(),
|
||||
'info' => $info,
|
||||
'session' => $session,
|
||||
'online' => $online,
|
||||
'players' => $players,
|
||||
'status' => $status
|
||||
];
|
||||
}
|
||||
|
|
|
|||
|
|
@ -11,6 +11,8 @@ use Symfony\Component\HttpFoundation\Request;
|
|||
|
||||
use App\Entity\Online;
|
||||
use App\Entity\Player;
|
||||
use App\Entity\Server;
|
||||
|
||||
use Doctrine\ORM\EntityManagerInterface;
|
||||
|
||||
class RssController extends AbstractController
|
||||
|
|
@ -32,78 +34,47 @@ class RssController extends AbstractController
|
|||
EntityManagerInterface $entityManagerInterface
|
||||
): Response
|
||||
{
|
||||
// Get HLServers config
|
||||
if ($hlservers = file_get_contents($this->getParameter('app.hlservers')))
|
||||
$online = [];
|
||||
|
||||
foreach ($entityManagerInterface->getRepository(Online::class)->findBy(
|
||||
[
|
||||
'crc32server' => $request->get('crc32server')
|
||||
],
|
||||
[
|
||||
'id' => 'DESC' // same as online.time but faster
|
||||
],
|
||||
10
|
||||
) as $value)
|
||||
{
|
||||
$hlservers = json_decode($hlservers);
|
||||
$online[] =
|
||||
[
|
||||
'id' => $value->getId(),
|
||||
'bots' => $value->getBots(),
|
||||
'players' => $value->getPlayers(),
|
||||
'total' => $value->getTotal(),
|
||||
'time' => $value->getTime()
|
||||
];
|
||||
}
|
||||
|
||||
else
|
||||
{
|
||||
$hlservers = [];
|
||||
}
|
||||
// Response
|
||||
$response = new Response();
|
||||
|
||||
// Find server info
|
||||
foreach ($hlservers as $hlserver)
|
||||
{
|
||||
// Generate CRC32 server ID
|
||||
$crc32server = crc32(
|
||||
$hlserver->host . ':' . $hlserver->port
|
||||
);
|
||||
$response->headers->set(
|
||||
'Content-Type',
|
||||
'text/xml'
|
||||
);
|
||||
|
||||
// Skip servers not registered in HLServers
|
||||
if ($crc32server != $request->get('crc32server'))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
// Get last online value
|
||||
$online = $entityManagerInterface->getRepository(Online::class)->findBy(
|
||||
return $this->render(
|
||||
'default/rss/online.xml.twig',
|
||||
[
|
||||
'server' =>
|
||||
[
|
||||
'crc32server' => $crc32server
|
||||
],
|
||||
[
|
||||
'id' => 'DESC' // same as online.time but faster
|
||||
],
|
||||
10
|
||||
);
|
||||
|
||||
$result = [];
|
||||
|
||||
foreach ($online as $value)
|
||||
{
|
||||
$result[] =
|
||||
[
|
||||
'id' => $value->getId(),
|
||||
'bots' => $value->getBots(),
|
||||
'players' => $value->getPlayers(),
|
||||
'total' => $value->getTotal(),
|
||||
'time' => $value->getTime()
|
||||
];
|
||||
}
|
||||
|
||||
// Response
|
||||
$response = new Response();
|
||||
|
||||
$response->headers->set(
|
||||
'Content-Type',
|
||||
'text/xml'
|
||||
);
|
||||
|
||||
return $this->render(
|
||||
'default/rss/online.xml.twig',
|
||||
[
|
||||
'server' =>
|
||||
[
|
||||
'crc32' => $crc32server,
|
||||
'host' => $hlserver->host,
|
||||
'port' => $hlserver->port,
|
||||
],
|
||||
'online' => $result
|
||||
],
|
||||
$response
|
||||
);
|
||||
}
|
||||
'crc32server' => $request->get('crc32server'),
|
||||
'online' => $online
|
||||
]
|
||||
],
|
||||
$response
|
||||
);
|
||||
|
||||
throw $this->createNotFoundException();
|
||||
}
|
||||
|
|
@ -125,77 +96,44 @@ class RssController extends AbstractController
|
|||
EntityManagerInterface $entityManagerInterface
|
||||
): Response
|
||||
{
|
||||
// Get HLServers config
|
||||
if ($hlservers = file_get_contents($this->getParameter('app.hlservers')))
|
||||
$players = [];
|
||||
|
||||
foreach ($entityManagerInterface->getRepository(Player::class)->findBy(
|
||||
[
|
||||
'crc32server' => $request->get('crc32server')
|
||||
],
|
||||
[
|
||||
'id' => 'DESC'
|
||||
],
|
||||
10
|
||||
) as $value)
|
||||
{
|
||||
$hlservers = json_decode($hlservers);
|
||||
$result[] =
|
||||
[
|
||||
'id' => $value->getId(),
|
||||
'name' => $value->getName(),
|
||||
'joined' => $value->getJoined()
|
||||
];
|
||||
}
|
||||
|
||||
else
|
||||
{
|
||||
$hlservers = [];
|
||||
}
|
||||
// Response
|
||||
$response = new Response();
|
||||
|
||||
// Find server info
|
||||
foreach ($hlservers as $hlserver)
|
||||
{
|
||||
// Generate CRC32 server ID
|
||||
$crc32server = crc32(
|
||||
$hlserver->host . ':' . $hlserver->port
|
||||
);
|
||||
$response->headers->set(
|
||||
'Content-Type',
|
||||
'text/xml'
|
||||
);
|
||||
|
||||
// Skip servers not registered in HLServers
|
||||
if ($crc32server != $request->get('crc32server'))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
// Get last players
|
||||
$players = $entityManagerInterface->getRepository(Player::class)->findBy(
|
||||
return $this->render(
|
||||
'default/rss/players.xml.twig',
|
||||
[
|
||||
'server' =>
|
||||
[
|
||||
'crc32server' => $crc32server
|
||||
],
|
||||
[
|
||||
'id' => 'DESC'
|
||||
],
|
||||
10
|
||||
);
|
||||
|
||||
$result = [];
|
||||
|
||||
foreach ($players as $value)
|
||||
{
|
||||
$result[] =
|
||||
[
|
||||
'id' => $value->getId(),
|
||||
'name' => $value->getName(),
|
||||
'joined' => $value->getJoined()
|
||||
];
|
||||
}
|
||||
|
||||
// Response
|
||||
$response = new Response();
|
||||
|
||||
$response->headers->set(
|
||||
'Content-Type',
|
||||
'text/xml'
|
||||
);
|
||||
|
||||
return $this->render(
|
||||
'default/rss/players.xml.twig',
|
||||
[
|
||||
'server' =>
|
||||
[
|
||||
'crc32' => $crc32server,
|
||||
'host' => $hlserver->host,
|
||||
'port' => $hlserver->port,
|
||||
],
|
||||
'players' => $result
|
||||
],
|
||||
$response
|
||||
);
|
||||
}
|
||||
|
||||
throw $this->createNotFoundException();
|
||||
'crc32server' => $request->get('crc32server'),
|
||||
'players' => $players
|
||||
]
|
||||
],
|
||||
$response
|
||||
);
|
||||
}
|
||||
}
|
||||
183
src/Controller/ServerController.php
Normal file
183
src/Controller/ServerController.php
Normal file
|
|
@ -0,0 +1,183 @@
|
|||
<?php
|
||||
|
||||
namespace App\Controller;
|
||||
|
||||
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
|
||||
use Symfony\Contracts\Translation\TranslatorInterface;
|
||||
|
||||
use Symfony\Component\Routing\Annotation\Route;
|
||||
use Symfony\Component\HttpFoundation\Response;
|
||||
use Symfony\Component\HttpFoundation\Request;
|
||||
|
||||
use App\Entity\Online;
|
||||
use App\Entity\Player;
|
||||
use App\Entity\Server;
|
||||
use Doctrine\ORM\EntityManagerInterface;
|
||||
|
||||
class ServerController extends AbstractController
|
||||
{
|
||||
#[Route(
|
||||
'/server/{crc32server}',
|
||||
name: 'server_index',
|
||||
requirements:
|
||||
[
|
||||
'crc32server' => '\d+',
|
||||
],
|
||||
methods:
|
||||
[
|
||||
'GET'
|
||||
]
|
||||
)]
|
||||
public function index(
|
||||
?Request $request,
|
||||
EntityManagerInterface $entityManagerInterface
|
||||
): Response
|
||||
{
|
||||
// Validate server
|
||||
$server = $entityManagerInterface->getRepository(Server::class)->findOneBy(
|
||||
[
|
||||
'crc32server' => $request->get('crc32server')
|
||||
]
|
||||
);
|
||||
|
||||
if (!$server)
|
||||
{
|
||||
throw $this->createNotFoundException();
|
||||
}
|
||||
|
||||
// Prepare request
|
||||
if ('online' == $request->get('sort') && in_array($request->get('field'), ['time','players','bots','total']))
|
||||
{
|
||||
$field = $request->get('field');
|
||||
}
|
||||
|
||||
else if ('players' == $request->get('sort') && in_array($request->get('field'), ['name','frags','joined','online']))
|
||||
{
|
||||
$field = $request->get('field');
|
||||
}
|
||||
|
||||
else
|
||||
{
|
||||
$field = 'time';
|
||||
}
|
||||
|
||||
if (in_array($request->get('order'), ['asc','desc']))
|
||||
{
|
||||
$order = $request->get('order');
|
||||
}
|
||||
|
||||
else
|
||||
{
|
||||
$order = 'desc';
|
||||
}
|
||||
|
||||
// Init defaults
|
||||
$info = [];
|
||||
$session = [];
|
||||
$online = [];
|
||||
$players = [];
|
||||
|
||||
// Format name
|
||||
if (false === filter_var($server->getHost(), FILTER_VALIDATE_IP, FILTER_FLAG_IPV6))
|
||||
{
|
||||
$name = "{$server->getHost()}:{$server->getPort()}";
|
||||
}
|
||||
|
||||
else
|
||||
{
|
||||
$name = "[{$server->getHost()}]:{$server->getPort()}";
|
||||
}
|
||||
|
||||
// Request server info
|
||||
try
|
||||
{
|
||||
$node = new \xPaw\SourceQuery\SourceQuery();
|
||||
|
||||
$node->Connect(
|
||||
false === filter_var($server->getHost(), FILTER_VALIDATE_IP, FILTER_FLAG_IPV6) ? $server->getHost() : "[{$server->getHost()}]",
|
||||
$server->getPort()
|
||||
);
|
||||
|
||||
if ($node->Ping())
|
||||
{
|
||||
if ($info = (array) $node->GetInfo())
|
||||
{
|
||||
// Get session
|
||||
$session = empty($info['Players']) ? [] : (array) $server->GetPlayers();
|
||||
|
||||
// Sort by players by frags
|
||||
if ($session)
|
||||
{
|
||||
array_multisort(
|
||||
array_column(
|
||||
$session,
|
||||
'Frags'
|
||||
),
|
||||
SORT_DESC,
|
||||
$session
|
||||
);
|
||||
}
|
||||
|
||||
// Get online
|
||||
$online = $entityManagerInterface->getRepository(Online::class)->findBy(
|
||||
[
|
||||
'crc32server' => $server->getCrc32Server()
|
||||
],
|
||||
'online' == $request->get('sort') ? [$field => $order] : ['time' => 'DESC'],
|
||||
10
|
||||
);
|
||||
|
||||
// Get players
|
||||
$players = $entityManagerInterface->getRepository(Player::class)->findBy(
|
||||
[
|
||||
'crc32server' => $server->getCrc32Server()
|
||||
],
|
||||
'players' == $request->get('sort') ? [$field => $order] : ['frags' => 'DESC'],
|
||||
10
|
||||
);
|
||||
}
|
||||
|
||||
$status = true;
|
||||
}
|
||||
|
||||
else
|
||||
{
|
||||
$status = false;
|
||||
}
|
||||
}
|
||||
|
||||
catch (Exception $error)
|
||||
{
|
||||
throw $this->createNotFoundException();
|
||||
}
|
||||
|
||||
catch (\Throwable $error)
|
||||
{
|
||||
$status = false;
|
||||
}
|
||||
|
||||
finally
|
||||
{
|
||||
$node->Disconnect();
|
||||
}
|
||||
|
||||
return $this->render(
|
||||
'default/server/index.html.twig',
|
||||
[
|
||||
'request' => $request,
|
||||
'server' =>
|
||||
[
|
||||
'name' => $name,
|
||||
'crc32server' => $server->getCrc32Server(),
|
||||
'host' => $server->getHost(),
|
||||
'port' => $server->getPort(),
|
||||
'info' => $info,
|
||||
'session' => $session,
|
||||
'online' => $online,
|
||||
'players' => $players,
|
||||
'status' => $status
|
||||
]
|
||||
]
|
||||
);
|
||||
}
|
||||
}
|
||||
111
src/Entity/Server.php
Normal file
111
src/Entity/Server.php
Normal file
|
|
@ -0,0 +1,111 @@
|
|||
<?php
|
||||
|
||||
namespace App\Entity;
|
||||
|
||||
use App\Repository\ServerRepository;
|
||||
use Doctrine\DBAL\Types\Types;
|
||||
use Doctrine\ORM\Mapping as ORM;
|
||||
|
||||
#[ORM\Entity(repositoryClass: ServerRepository::class)]
|
||||
class Server
|
||||
{
|
||||
#[ORM\Id]
|
||||
#[ORM\GeneratedValue]
|
||||
#[ORM\Column]
|
||||
private ?int $id = null;
|
||||
|
||||
#[ORM\Column(type: Types::BIGINT)]
|
||||
private ?string $crc32server = null;
|
||||
|
||||
#[ORM\Column(type: Types::BIGINT)]
|
||||
private ?string $added = null;
|
||||
|
||||
#[ORM\Column(type: Types::BIGINT)]
|
||||
private ?string $updated = null;
|
||||
|
||||
#[ORM\Column(type: Types::BIGINT)]
|
||||
private ?string $online = null;
|
||||
|
||||
#[ORM\Column(length: 255)]
|
||||
private ?string $host = null;
|
||||
|
||||
#[ORM\Column(type: Types::INTEGER)]
|
||||
private ?int $port = null;
|
||||
|
||||
public function getId(): ?int
|
||||
{
|
||||
return $this->id;
|
||||
}
|
||||
|
||||
public function getCrc32server(): ?string
|
||||
{
|
||||
return $this->crc32server;
|
||||
}
|
||||
|
||||
public function setCrc32server(string $crc32server): static
|
||||
{
|
||||
$this->crc32server = $crc32server;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function getAdded(): ?int
|
||||
{
|
||||
return $this->added;
|
||||
}
|
||||
|
||||
public function setAdded(int $added): static
|
||||
{
|
||||
$this->added = $added;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function getUpdated(): ?int
|
||||
{
|
||||
return $this->updated;
|
||||
}
|
||||
|
||||
public function setUpdated(int $updated): static
|
||||
{
|
||||
$this->updated = $updated;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function getOnline(): ?int
|
||||
{
|
||||
return $this->online;
|
||||
}
|
||||
|
||||
public function setOnline(int $online): static
|
||||
{
|
||||
$this->online = $online;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function getHost(): ?string
|
||||
{
|
||||
return $this->host;
|
||||
}
|
||||
|
||||
public function setHost(string $host): static
|
||||
{
|
||||
$this->host = $host;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function getPort(): ?int
|
||||
{
|
||||
return $this->port;
|
||||
}
|
||||
|
||||
public function setPort(int $port): static
|
||||
{
|
||||
$this->port = $port;
|
||||
|
||||
return $this;
|
||||
}
|
||||
}
|
||||
23
src/Repository/ServerRepository.php
Normal file
23
src/Repository/ServerRepository.php
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
<?php
|
||||
|
||||
namespace App\Repository;
|
||||
|
||||
use App\Entity\Server;
|
||||
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
|
||||
use Doctrine\Persistence\ManagerRegistry;
|
||||
|
||||
/**
|
||||
* @extends ServiceEntityRepository<Server>
|
||||
*
|
||||
* @method Server|null find($id, $lockMode = null, $lockVersion = null)
|
||||
* @method Server|null findOneBy(array $criteria, array $orderBy = null)
|
||||
* @method Server[] findAll()
|
||||
* @method Server[] findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null)
|
||||
*/
|
||||
class ServerRepository extends ServiceEntityRepository
|
||||
{
|
||||
public function __construct(ManagerRegistry $registry)
|
||||
{
|
||||
parent::__construct($registry, Server::class);
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue