continued to document the classes and functions.
This commit is contained in:
parent
51b8e30b84
commit
b7939127e1
|
@ -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();
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,9 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Namespace for classes and functions related to managing services.
|
||||||
|
* @package NAE\Service
|
||||||
|
*/
|
||||||
namespace NAE\Service;
|
namespace NAE\Service;
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -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) {
|
||||||
|
|
|
@ -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) {
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue