Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 7
0.00% covered (danger)
0.00%
0 / 3
CRAP
0.00% covered (danger)
0.00%
0 / 1
Cs2
0.00% covered (danger)
0.00%
0 / 7
0.00% covered (danger)
0.00%
0 / 3
72
0.00% covered (danger)
0.00%
0 / 1
 __construct
0.00% covered (danger)
0.00%
0 / 5
0.00% covered (danger)
0.00%
0 / 1
42
 getNativeJoinURI
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 query_server
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
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\ServerQuery\ServerProtocols;
14
15use function is_int;
16use function is_string;
17use Override;
18
19/**
20 * Implements the query protocol for Counter-Strike 2 servers.
21 * Uses the Steam protocol to retrieve server information, player lists, and game statistics.
22 */
23class Cs2 extends Steam
24{
25    /**
26     * Protocol name.
27     */
28    public string $name = 'Counter-Strike 2';
29
30    /**
31     * List of supported games.
32     *
33     * @var array<string>
34     */
35    public array $supportedGames = ['Counter-Strike 2'];
36
37    /**
38     * Protocol identifier.
39     */
40    public string $protocol = 'A2S';
41
42    /**
43     * Game series.
44     *
45     * @var array<string>
46     */
47    public array $game_series_list = ['Counter-Strike'];
48
49    /**
50     * CS2 specific port adjustment if needed.
51     * Some CS2 servers use same port for game and queries (unlike traditional Valve +1 convention).
52     */
53    protected int $port_diff = 0;
54
55    /**
56     * Constructor.
57     */
58    public function __construct(mixed $address = null, mixed $queryport = null)
59    {
60        $address   = $address === null ? null : (is_string($address) ? $address : null);
61        $queryport = $queryport === null ? null : (is_int($queryport) ? $queryport : null);
62        parent::__construct($address, $queryport);
63
64        // For CS2, query port is game port + 1
65        if ($queryport !== null) {
66            $this->queryport = $queryport + $this->port_diff;
67        }
68    }
69
70    /**
71     * Returns a native join URI for CS2.
72     */
73    #[Override]
74    public function getNativeJoinURI(): string
75    {
76        return 'steam://connect/' . $this->address . ':' . $this->hostport;
77    }
78
79    /**
80     * query_server method.
81     */
82    #[Override]
83    public function query_server(bool $getPlayers = true, bool $getRules = true): bool
84    {
85        // CS2 does not respond to A2S_RULES queries, so skip rules
86        return parent::query_server($getPlayers, false);
87    }
88}