From 097feba4d538ffe67622f79aaaeec5a21d8f4c45 Mon Sep 17 00:00:00 2001 From: "Dylan K. Taylor" Date: Sat, 20 May 2023 16:57:24 +0100 Subject: [PATCH] Absorb pocketmine/log-pthreads into PM core this was previously part of the abandoned package pocketmine/spl. It had to be separated in the PM3 days, because RakLib depended on it. Since RakLib 0.13, RakLib stopped being dependent on or aware of pthreads, so it no longer depends on any thread-related packages. It's also possible to absorb pocketmine/snooze and pocketmine/classloader back into the core with this in mind. --- composer.json | 1 - composer.lock | 48 +------------- src/Server.php | 5 +- src/network/mcpe/raklib/RakLibServer.php | 3 +- src/scheduler/AsyncPool.php | 3 +- src/scheduler/AsyncWorker.php | 5 +- src/thread/log/AttachableThreadSafeLogger.php | 64 +++++++++++++++++++ src/thread/log/ThreadSafeLogger.php | 30 +++++++++ src/thread/log/ThreadSafeLoggerAttachment.php | 30 +++++++++ src/utils/MainLogger.php | 6 +- 10 files changed, 139 insertions(+), 56 deletions(-) create mode 100644 src/thread/log/AttachableThreadSafeLogger.php create mode 100644 src/thread/log/ThreadSafeLogger.php create mode 100644 src/thread/log/ThreadSafeLoggerAttachment.php diff --git a/composer.json b/composer.json index 63d5b0d00..c8fb559d7 100644 --- a/composer.json +++ b/composer.json @@ -45,7 +45,6 @@ "pocketmine/errorhandler": "^0.6.0", "pocketmine/locale-data": "~2.19.0", "pocketmine/log": "^0.4.0", - "pocketmine/log-pthreads": "dev-stable", "pocketmine/math": "^0.4.0", "pocketmine/nbt": "^0.3.2", "pocketmine/raklib": "^0.15.0", diff --git a/composer.lock b/composer.lock index 4b6e1622f..05d87b634 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "507c2a45350440a7717ed089190fe4f0", + "content-hash": "0dc836612512d87a694945ffb87a4096", "packages": [ { "name": "adhocore/json-comment", @@ -651,51 +651,6 @@ }, "time": "2021-06-18T19:08:09+00:00" }, - { - "name": "pocketmine/log-pthreads", - "version": "dev-stable", - "source": { - "type": "git", - "url": "https://github.com/pmmp/LogPthreads.git", - "reference": "bb3b5395042d12ec0d7ad5c855fd86eaf12869d3" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/pmmp/LogPthreads/zipball/bb3b5395042d12ec0d7ad5c855fd86eaf12869d3", - "reference": "bb3b5395042d12ec0d7ad5c855fd86eaf12869d3", - "shasum": "" - }, - "require": { - "ext-pmmpthread": "^6.0", - "php": "^8.1", - "pocketmine/log": "^0.4.0" - }, - "conflict": { - "pocketmine/spl": "<0.4" - }, - "require-dev": { - "phpstan/extension-installer": "^1.0", - "phpstan/phpstan": "1.10.3", - "phpstan/phpstan-strict-rules": "^1.0" - }, - "default-branch": true, - "type": "library", - "autoload": { - "classmap": [ - "./src" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "LGPL-3.0" - ], - "description": "Logging components specialized for pthreads used by PocketMine-MP and related projects", - "support": { - "issues": "https://github.com/pmmp/LogPthreads/issues", - "source": "https://github.com/pmmp/LogPthreads/tree/stable" - }, - "time": "2023-05-19T23:38:36+00:00" - }, { "name": "pocketmine/math", "version": "0.4.3", @@ -3298,7 +3253,6 @@ "minimum-stability": "stable", "stability-flags": { "pocketmine/classloader": 20, - "pocketmine/log-pthreads": 20, "pocketmine/snooze": 20 }, "prefer-stable": false, diff --git a/src/Server.php b/src/Server.php index 1262bc00e..df419c918 100644 --- a/src/Server.php +++ b/src/Server.php @@ -92,6 +92,7 @@ use pocketmine\resourcepacks\ResourcePackManager; use pocketmine\scheduler\AsyncPool; use pocketmine\snooze\SleeperHandler; use pocketmine\stats\SendUsageTask; +use pocketmine\thread\log\AttachableThreadSafeLogger; use pocketmine\timings\Timings; use pocketmine\timings\TimingsHandler; use pocketmine\updater\UpdateChecker; @@ -417,7 +418,7 @@ class Server{ return $this->autoloader; } - public function getLogger() : \AttachableThreadSafeLogger{ + public function getLogger() : AttachableThreadSafeLogger{ return $this->logger; } @@ -760,7 +761,7 @@ class Server{ public function __construct( private \DynamicClassLoader $autoloader, - private \AttachableThreadSafeLogger $logger, + private AttachableThreadSafeLogger $logger, string $dataPath, string $pluginPath ){ diff --git a/src/network/mcpe/raklib/RakLibServer.php b/src/network/mcpe/raklib/RakLibServer.php index 3a3cea673..5d4492f5f 100644 --- a/src/network/mcpe/raklib/RakLibServer.php +++ b/src/network/mcpe/raklib/RakLibServer.php @@ -26,6 +26,7 @@ namespace pocketmine\network\mcpe\raklib; use pmmp\thread\Thread as NativeThread; use pmmp\thread\ThreadSafeArray; use pocketmine\snooze\SleeperNotifier; +use pocketmine\thread\log\ThreadSafeLogger; use pocketmine\thread\NonThreadSafeValue; use pocketmine\thread\Thread; use raklib\generic\SocketException; @@ -55,7 +56,7 @@ class RakLibServer extends Thread{ * @phpstan-param ThreadSafeArray $threadToMainBuffer */ public function __construct( - protected \ThreadSafeLogger $logger, + protected ThreadSafeLogger $logger, protected ThreadSafeArray $mainToThreadBuffer, protected ThreadSafeArray $threadToMainBuffer, InternetAddress $address, diff --git a/src/scheduler/AsyncPool.php b/src/scheduler/AsyncPool.php index e04e58fd1..72d8b29e5 100644 --- a/src/scheduler/AsyncPool.php +++ b/src/scheduler/AsyncPool.php @@ -27,6 +27,7 @@ use pmmp\thread\Thread as NativeThread; use pmmp\thread\ThreadSafeArray; use pocketmine\snooze\SleeperHandler; use pocketmine\snooze\SleeperNotifier; +use pocketmine\thread\log\ThreadSafeLogger; use pocketmine\utils\Utils; use function array_keys; use function array_map; @@ -70,7 +71,7 @@ class AsyncPool{ protected int $size, private int $workerMemoryLimit, private \ClassLoader $classLoader, - private \ThreadSafeLogger $logger, + private ThreadSafeLogger $logger, private SleeperHandler $eventLoop ){} diff --git a/src/scheduler/AsyncWorker.php b/src/scheduler/AsyncWorker.php index f012b61d3..89908ff31 100644 --- a/src/scheduler/AsyncWorker.php +++ b/src/scheduler/AsyncWorker.php @@ -25,6 +25,7 @@ namespace pocketmine\scheduler; use pmmp\thread\Thread as NativeThread; use pocketmine\snooze\SleeperNotifier; +use pocketmine\thread\log\ThreadSafeLogger; use pocketmine\thread\Worker; use function gc_enable; use function ini_set; @@ -34,7 +35,7 @@ class AsyncWorker extends Worker{ private static array $store = []; public function __construct( - private \ThreadSafeLogger $logger, + private ThreadSafeLogger $logger, private int $id, private int $memoryLimit, private SleeperNotifier $notifier @@ -58,7 +59,7 @@ class AsyncWorker extends Worker{ } } - public function getLogger() : \ThreadSafeLogger{ + public function getLogger() : ThreadSafeLogger{ return $this->logger; } diff --git a/src/thread/log/AttachableThreadSafeLogger.php b/src/thread/log/AttachableThreadSafeLogger.php new file mode 100644 index 000000000..16c06f7ff --- /dev/null +++ b/src/thread/log/AttachableThreadSafeLogger.php @@ -0,0 +1,64 @@ + + */ + protected ThreadSafeArray $attachments; + + public function __construct(){ + $this->attachments = new ThreadSafeArray(); + } + + public function addAttachment(ThreadSafeLoggerAttachment $attachment) : void{ + $this->attachments[] = $attachment; + } + + public function removeAttachment(ThreadSafeLoggerAttachment $attachment) : void{ + foreach($this->attachments as $i => $a){ + if($attachment === $a){ + unset($this->attachments[$i]); + } + } + } + + public function removeAttachments() : void{ + foreach($this->attachments as $i => $a){ + unset($this->attachments[$i]); + } + } + + /** + * @return ThreadSafeLoggerAttachment[] + */ + public function getAttachments() : array{ + return (array) $this->attachments; + } +} diff --git a/src/thread/log/ThreadSafeLogger.php b/src/thread/log/ThreadSafeLogger.php new file mode 100644 index 000000000..a937f8f58 --- /dev/null +++ b/src/thread/log/ThreadSafeLogger.php @@ -0,0 +1,30 @@ +logWriterThread->write($time->format("Y-m-d") . " " . TextFormat::clean($message) . PHP_EOL); /** - * @var \ThreadSafeLoggerAttachment $attachment + * @var ThreadSafeLoggerAttachment $attachment */ foreach($this->attachments as $attachment){ $attachment->log($level, $message);