continued to document the classes and functions.

This commit is contained in:
Marcel Naeve 2024-11-11 01:21:06 +01:00
parent 51b8e30b84
commit b7939127e1
Signed by: manae
GPG Key ID: CBB7B21A2EBDC6A9
5 changed files with 160 additions and 16 deletions

View File

@ -1,19 +1,34 @@
<?php <?php
/**
* Namespace for classes and functions related to the game Factorio.
* @package NAE\Factorio
*/
namespace NAE\Factorio; namespace NAE\Factorio;
/**
* Class for parsing and comparing Factorio versions.
* @author "Marcel Naeve" <php@naeve.info>
* @license MIT License (http://www.opensource.org/licenses/mit)
*/
class FactorioVersion { class FactorioVersion {
/**
* @var string The Factorio Version
*/
private $version; private $version;
/**
* @var int The Factorio version converted to an comparable integer.
*/
private $intVersion; private $intVersion;
/** /**
* Füllt eine Zeichenkette am anfang mit Nullen auf bis die Ziellänge erreicht ist. * Fills a string with zeros at the beginning till string length matches the target length.
* @param string Zu füllende Zeichenkette * @param string $str string to fill
* @param int Ziellänge der gefüllten Zeichenkette * @param int $target_length Target length of the string
* @return string die Zeichenkette mit Nullen vorne angefügt um die Ziellänge zu erreichen * @return string string with zeros at the beginning till string length matches
*/ */
private function zero_fill(string $str, int $target_length) { private function zero_fill(string $str, int $target_length) {
@ -30,9 +45,9 @@ class FactorioVersion {
} }
/** /**
* Formatiert die Factorio Versionsnummern um zu einem Vergleichbaren Integer. * Formats the Factorio version string to a comparable integer.
* @param string Factorio Versions Zeichenkette Beispiel: 2.0.14 * @param string $vs Factorio version string (example: 2.0.14)
* @return int zum einfachen Vergleich formatierter Versions-Integer. Beispiel: versionsFormat("2.0.14") -> "000200000014" -> int(200000014) * @return int factorio version as comparable integer (example: versionFormat("2.0.14") -> "000200000014" -> int(200000014))
*/ */
private function versionFormat(string $vs) : int { private function versionFormat(string $vs) : int {
@ -47,24 +62,43 @@ class FactorioVersion {
} }
/**
* Constructor.
* @param string $version Factorio version string (example: 2.0.14)
*/
public function __construct(string $version) { public function __construct(string $version) {
$this->version = $version; $this->version = $version;
$this->intVersion = $this->versionFormat($version); $this->intVersion = $this->versionFormat($version);
} }
/**
* Returns the Factorio version string (example: 2.0.14).
* @return string Factorio version string (example: 2.0.14)
*/
public function getVersion() : string { public function getVersion() : string {
return $this->version; return $this->version;
} }
/**
* Returns the Factorio version as a comparable integer (example: versionFormat("2.0.14") -> int(200000014)).
* @return integer Factorio version as a comparable integer (example: versionFormat("2.0.14") -> int(200000014)).
*/
public function getIntVersion() : int { public function getIntVersion() : int {
return $this->intVersion; return $this->intVersion;
} }
/**
* Checks if the current Factorio version is newer than another version.
* @param FactorioVersion $other Another FactorioVersion object
*/
public function isNewer(FactorioVersion $other) : bool { public function isNewer(FactorioVersion $other) : bool {
return $this->intVersion > $other->getIntVersion(); return $this->intVersion > $other->getIntVersion();
} }
/**
* Checks if the current Factorio version is older than another version.
* @param FactorioVersion $other Another FactorioVersion object
*/
public function isOlder(FactorioVersion $other) : bool { public function isOlder(FactorioVersion $other) : bool {
return $this->intVersion < $other->getIntVersion(); return $this->intVersion < $other->getIntVersion();
} }

View File

@ -1,5 +1,9 @@
<?php <?php
/**
* Namespace for classes and functions related to managing services.
* @package NAE\Service
*/
namespace NAE\Service; namespace NAE\Service;

View File

@ -1,30 +1,60 @@
<?php <?php
/**
* Namespace for Terminal related classes.
* @package NAE\Terminal.
*/
namespace NAE\Terminal; namespace NAE\Terminal;
/**
* A Class to print messages to the terminal with different styles and colors.
* @author "Marcel Naeve" <php@naeve.info>
* @license MIT License (http://www.opensource.org/licenses/mit)
*/
class TerminalMessage { class TerminalMessage {
/**
* Send a message to the terminal ending with a line break at the end.
* @param string $msg The message to send.
*/
public function send(string $msg) { public function send(string $msg) {
echo $msg . PHP_EOL; echo $msg . PHP_EOL;
} }
/**
* Send a title to the terminal with a specified layer and and a double line break at the end.
* @param string $msg The title message to send.
* @param string $layer The layer (default: 0)
*/
public function sendTitle(string $msg, int $layer=0) { public function sendTitle(string $msg, int $layer=0) {
$layerString = "#"; $layerString = "#";
for($i=0; $i<$layer; $i++) { for($i=0; $i<$layer; $i++) {
$layerString .= "#"; $layerString .= "#";
} }
self::send( "\033[1m[$layerString] $msg\033[0m" . PHP_EOL ); self::send( "\033[1m[$layerString] $msg\033[0m" . PHP_EOL );
} }
/**
* Send a success message to the terminal with a green color and a line break at the end.
* @param string $msg The success message to send.
*/
public function sendSuccess(string $msg) { public function sendSuccess(string $msg) {
self::send( "\033[1;32m[SUCCESS] $msg\033[0m" ); self::send( "\033[1;32m[SUCCESS] $msg\033[0m" );
} }
/**
* Send an info message to the terminal with a blue color and a line break at the end.
* @param string $msg The info message to send.
*/
public function sendInfo(string $msg) { public function sendInfo(string $msg) {
self::send( "\033[1;34m[INFO] $msg\033[0m" ); self::send( "\033[1;34m[INFO] $msg\033[0m" );
} }
/**
* Send an error message to the terminal with a red color and a line break at the end.
* @param string $msg The error message to send.
* @param bool $critical If true, the script will terminate with a non-zero exit code (default: false).
*/
public function sendError(string $msg, bool $critical=false) { public function sendError(string $msg, bool $critical=false) {
self::send( "\033[1;31m[ERROR] $msg\033[0m" ); self::send( "\033[1;31m[ERROR] $msg\033[0m" );
if ($critical) { if ($critical) {
@ -32,6 +62,11 @@ class TerminalMessage {
} }
} }
/**
* Send a warning message to the terminal with a yellow color and a line break at the end.
* @param string $msg The warning message to send.
* @param bool $critical If true, the script will terminate with a non-zero exit code (default: false).
*/
public function sendWarning(string $msg, bool $critical=false) { public function sendWarning(string $msg, bool $critical=false) {
self::send( "\033[1;33m[WARNING] $msg\033[0m" ); self::send( "\033[1;33m[WARNING] $msg\033[0m" );
if ($critical) { if ($critical) {

View File

@ -1,17 +1,55 @@
<?php <?php
/**
* Namespace for Valve RCON related classes and functions.
* @package NAE\Valve\Rcon
*/
namespace NAE\Valve\Rcon; namespace NAE\Valve\Rcon;
/**
* A Class to interact with a Valve RCON server.
* @author "Marcel Naeve" <php@naeve.info>
* @license MIT License (http://www.opensource.org/licenses/mit)
*/
class ValveRcon { class ValveRcon {
/**
* @var string IP address of the RCON server
*/
private $ip; private $ip;
/**
* @var int Port number of the RCON server
*/
private $port; private $port;
/**
* @var string Password to authenticate with the RCON server
*/
private $password; private $password;
/**
* @var int Timeout for socket operations in seconds
*/
private $timeout; private $timeout;
/**
* @var resource Socket resource for RCON communication
*/
private $socket; private $socket;
/**
* @var array Error details if any occurs during communication
*/
private $err; private $err;
/**
* Constructor, setting variables.
* @param string $ip IP address of the RCON server
* @param int $port Port number of the RCON server
* @param string $password Password to authenticate with the RCON server
* @param int $timeout Timeout for socket operations in seconds (default: 2 seconds)
*/
public function __construct(string $ip, int $port, string $password, int $timeout=2) { public function __construct(string $ip, int $port, string $password, int $timeout=2) {
$this->ip = $ip; $this->ip = $ip;
$this->port = $port; $this->port = $port;
@ -19,12 +57,17 @@ class ValveRcon {
$this->timeout = $timeout; $this->timeout = $timeout;
} }
/**
* Establishes a connection to the RCON server.
* @return bool Connection established successfully?
*/
private function connect() : bool { private function connect() : bool {
// prepare variables for error handling
$errno = null; $errno = null;
$errmsg = ""; $errmsg = "";
$this->socket = fsockopen( $this->socket = fsockopen( // connect to RCON server
"udp://{$this->ip}", "udp://{$this->ip}",
$this->port, $this->port,
$errno, $errno,
@ -32,7 +75,7 @@ class ValveRcon {
$this->timeout $this->timeout
); );
if(!$this->socket) { if(!$this->socket) { // connection failed?
$this->err = [ $this->err = [
"code" => $errno, "code" => $errno,
"message" => "Socket connection failed: $errmsg" "message" => "Socket connection failed: $errmsg"
@ -44,6 +87,9 @@ class ValveRcon {
} }
/**
* Closes the connection to the RCON server
*/
private function disconnect() : void { private function disconnect() : void {
if ( $this->isConnected() ) { if ( $this->isConnected() ) {
@ -53,12 +99,19 @@ class ValveRcon {
} }
/**
* Checks if the connection to the RCON server is established.
*/
private function isConnected() : bool { private function isConnected() : bool {
return ( get_resource_type($this->socket) !== null ); // check if socket is resource type, as it should be return ( get_resource_type($this->socket) !== null ); // check if socket is resource type, as it should be
} }
/**
* Receives data from the RCON server.
* @return string|null Received data or null if no data is available
*/
private function read() : ?string { private function read() : ?string {
if (!$this->isConnected()) { if (!$this->isConnected()) {
@ -82,6 +135,10 @@ class ValveRcon {
} }
/**
* Writes a command to the RCON server.
* @return bool $cmd Command writen successfully?
*/
private function write(string $cmd) : bool { private function write(string $cmd) : bool {
if (!$this->isConnected()) { if (!$this->isConnected()) {
@ -96,6 +153,12 @@ class ValveRcon {
} }
/**
* Sends a command to the RCON server and optionally reads the response.
* @param string $cmd Command to send to the RCON server
* @param bool $read Should the response be read from the RCON server? (default: false)
* @return string|null Response from the RCON server or null if no response is expected or read fails
*/
public function sendCommand(string $cmd, bool $read=false) : ?string { public function sendCommand(string $cmd, bool $read=false) : ?string {
$this->connect(); $this->connect();
@ -125,6 +188,10 @@ class ValveRcon {
} }
/**
* Returns the last error details if any occurred during communication.
* @return object|null Last error details or null if no error has occurred (error object contains code and message as properties)
*/
public function getError() :?object { public function getError() :?object {
if($this->err === null) { if($this->err === null) {

View File

@ -1,12 +1,16 @@
<?php <?php
/**
* Namespace for PHP-CURL related classes and functions.
* @package NAE\Functions\Curl
*/
namespace NAE\Functions\Curl; namespace NAE\Functions\Curl;
/** /**
* Lädt eine Dei herunter mit Hilfe von php-curl. * Lädt eine Dei herunter mit Hilfe von php-curl.
* @param string Zielpfad * @param string $fileDestination Zielpfad
* @param string Quellpfad/URL * @param string $fileSource Quellpfad/URL
* @return bool Download Erfolgreich? * @return bool Download Erfolgreich? (only works when the file size is known upfront from headers)
*/ */
function downloadFile(string $fileDestination, string $fileSource) : bool { function downloadFile(string $fileDestination, string $fileSource) : bool {
@ -24,6 +28,6 @@ function downloadFile(string $fileDestination, string $fileSource) : bool {
curl_close($ch); curl_close($ch);
fclose($fp); fclose($fp);
return ( $info["download_content_length"]==$info["size_download"] ); return ( $info["download_content_length"]==$info["size_download"] ); // only works when the file size is known upfront from headers
} }