Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
100.00% covered (success)
100.00%
24 / 24
100.00% covered (success)
100.00%
2 / 2
CRAP
100.00% covered (success)
100.00%
1 / 1
ServerInfo
100.00% covered (success)
100.00%
24 / 24
100.00% covered (success)
100.00%
2 / 2
2
100.00% covered (success)
100.00%
1 / 1
 __construct
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 toArray
100.00% covered (success)
100.00%
23 / 23
100.00% covered (success)
100.00%
1 / 1
1
1<?php declare(strict_types=1);
2
3/**
4 * Clansuite Server Query
5 *
6 * SPDX-FileCopyrightText: 2003-2025 Jens A. Koch
7 * SPDX-License-Identifier: MIT
8 *
9 * For the full copyright and license information, please view
10 * the LICENSE file that was distributed with this source code.
11 */
12
13namespace Clansuite\Capture;
14
15/**
16 * Represents detailed information about a game server, including status, players, and configuration.
17 */
18final class ServerInfo
19{
20    /**
21     * Initializes server information with the provided data.
22     *
23     * @param null|string  $address     Server IP address
24     * @param null|int     $queryport   Query port number
25     * @param bool         $online      Whether the server is online
26     * @param null|string  $gamename    Name of the game
27     * @param null|string  $gameversion Game version
28     * @param null|string  $servertitle Server title
29     * @param null|string  $mapname     Current map name
30     * @param null|string  $gametype    Game type/mode
31     * @param int          $numplayers  Current number of players
32     * @param int          $maxplayers  Maximum number of players
33     * @param array<mixed> $rules       Server rules/configuration
34     * @param array<mixed> $players     List of players
35     * @param array<mixed> $channels    Voice channels (for applicable games)
36     * @param null|string  $errstr      Error message if query failed
37     */
38    public function __construct(
39        public ?string $address = null,
40        public ?int $queryport = null,
41        public bool $online = false,
42        public ?string $gamename = null,
43        public ?string $gameversion = null,
44        public ?string $servertitle = null,
45        public ?string $mapname = null,
46        public ?string $gametype = null,
47        public int $numplayers = 0,
48        public int $maxplayers = 0,
49        public array $rules = [],
50        public array $players = [],
51        public array $channels = [],
52        public ?string $errstr = null,
53        public ?bool $password = null,
54        public ?string $name = null,
55        public ?string $map = null,
56        public ?int $players_current = null,
57        public ?int $players_max = null,
58        public ?string $version = null,
59        public ?string $motd = null,
60    ) {
61    }
62
63    /**
64     * Converts the server information to an associative array.
65     *
66     * @return array<mixed> Server info as key-value pairs
67     */
68    public function toArray(): array
69    {
70        return [
71            'address'         => $this->address,
72            'queryport'       => $this->queryport,
73            'online'          => $this->online,
74            'gamename'        => $this->gamename,
75            'gameversion'     => $this->gameversion,
76            'servertitle'     => $this->servertitle,
77            'mapname'         => $this->mapname,
78            'gametype'        => $this->gametype,
79            'numplayers'      => $this->numplayers,
80            'maxplayers'      => $this->maxplayers,
81            'rules'           => $this->rules,
82            'players'         => $this->players,
83            'channels'        => $this->channels,
84            'errstr'          => $this->errstr,
85            'password'        => $this->password,
86            'name'            => $this->name,
87            'map'             => $this->map,
88            'players_current' => $this->players_current,
89            'players_max'     => $this->players_max,
90            'version'         => $this->version,
91            'motd'            => $this->motd,
92        ];
93    }
94}