diff --git a/src/command/defaults/TimingsCommand.php b/src/command/defaults/TimingsCommand.php index d18dc55aa..6e2ece723 100644 --- a/src/command/defaults/TimingsCommand.php +++ b/src/command/defaults/TimingsCommand.php @@ -29,6 +29,7 @@ use pocketmine\command\utils\InvalidCommandSyntaxException; use pocketmine\lang\TranslationContainer; use pocketmine\player\Player; use pocketmine\scheduler\BulkCurlTask; +use pocketmine\scheduler\BulkCurlTaskOperation; use pocketmine\timings\TimingsHandler; use pocketmine\utils\InternetException; use function count; @@ -139,9 +140,11 @@ class TimingsCommand extends VanillaCommand{ */ public function __construct(CommandSender $sender, string $host, string $agent, array $data){ parent::__construct([ - [ - "page" => "https://$host?upload=true", - "extraOpts" => [ + new BulkCurlTaskOperation( + "https://$host?upload=true", + 10, + [], + [ CURLOPT_HTTPHEADER => [ "User-Agent: $agent", "Content-Type: application/x-www-form-urlencoded" @@ -151,7 +154,7 @@ class TimingsCommand extends VanillaCommand{ CURLOPT_AUTOREFERER => false, CURLOPT_FOLLOWLOCATION => false ] - ] + ) ]); $this->host = $host; $this->storeLocal(self::TLS_KEY_SENDER, $sender); diff --git a/src/scheduler/BulkCurlTask.php b/src/scheduler/BulkCurlTask.php index bd9a3b059..b13bc989f 100644 --- a/src/scheduler/BulkCurlTask.php +++ b/src/scheduler/BulkCurlTask.php @@ -44,20 +44,23 @@ class BulkCurlTask extends AsyncTask{ * "timeout", "extraHeaders" and "extraOpts". Documentation of these options are same as those in * {@link Utils::simpleCurl}. * - * @param mixed[][] $operations - * @phpstan-param list, extraOpts?: array}> $operations + * @param BulkCurlTaskOperation[] $operations + * @phpstan-param list $operations */ public function __construct(array $operations){ $this->operations = igbinary_serialize($operations); } public function onRun() : void{ - /** @phpstan-var list, extraOpts?: array}> $operations */ + /** + * @var BulkCurlTaskOperation[] $operations + * @phpstan-var list $operations + */ $operations = igbinary_unserialize($this->operations); $results = []; foreach($operations as $op){ try{ - $results[] = Internet::simpleCurl($op["page"], $op["timeout"] ?? 10, $op["extraHeaders"] ?? [], $op["extraOpts"] ?? []); + $results[] = Internet::simpleCurl($op->getPage(), $op->getTimeout(), $op->getExtraHeaders(), $op->getExtraOpts()); }catch(InternetException $e){ $results[] = $e; } diff --git a/src/scheduler/BulkCurlTaskOperation.php b/src/scheduler/BulkCurlTaskOperation.php new file mode 100644 index 000000000..9050d90ad --- /dev/null +++ b/src/scheduler/BulkCurlTaskOperation.php @@ -0,0 +1,71 @@ + + */ + private $extraHeaders; + /** + * @var mixed[] + * @phpstan-var array + */ + private $extraOpts; + + /** + * @param string[] $extraHeaders + * @param mixed[] $extraOpts + * @phpstan-param list $extraHeaders + * @phpstan-param array $extraOpts + */ + public function __construct(string $page, float $timeout = 10, array $extraHeaders = [], array $extraOpts = []){ + $this->page = $page; + $this->timeout = $timeout; + $this->extraHeaders = $extraHeaders; + $this->extraOpts = $extraOpts; + } + + public function getPage() : string{ return $this->page; } + + public function getTimeout() : float{ return $this->timeout; } + + /** + * @return string[] + * @phpstan-return list + */ + public function getExtraHeaders() : array{ return $this->extraHeaders; } + + /** + * @return mixed[] + * @phpstan-return array + */ + public function getExtraOpts() : array{ return $this->extraOpts; } +} diff --git a/tests/phpstan/configs/check-explicit-mixed-baseline.neon b/tests/phpstan/configs/check-explicit-mixed-baseline.neon index eb753080c..5ffcc2913 100644 --- a/tests/phpstan/configs/check-explicit-mixed-baseline.neon +++ b/tests/phpstan/configs/check-explicit-mixed-baseline.neon @@ -96,7 +96,7 @@ parameters: path: ../../../src/command/CommandReader.php - - message: "#^Parameter \\#2 \\$host of class class@anonymous/src/command/defaults/TimingsCommand\\.php\\:130 constructor expects string, mixed given\\.$#" + message: "#^Parameter \\#2 \\$host of class class@anonymous/src/command/defaults/TimingsCommand\\.php\\:131 constructor expects string, mixed given\\.$#" count: 1 path: ../../../src/command/defaults/TimingsCommand.php diff --git a/tests/phpstan/configs/l7-baseline.neon b/tests/phpstan/configs/l7-baseline.neon index cfc834ca8..7698f0950 100644 --- a/tests/phpstan/configs/l7-baseline.neon +++ b/tests/phpstan/configs/l7-baseline.neon @@ -511,7 +511,7 @@ parameters: path: ../../../src/command/defaults/TimingsCommand.php - - message: "#^Parameter \\#4 \\$data of class class@anonymous/src/command/defaults/TimingsCommand\\.php\\:130 constructor expects array\\, array\\ given\\.$#" + message: "#^Parameter \\#4 \\$data of class class@anonymous/src/command/defaults/TimingsCommand\\.php\\:131 constructor expects array\\, array\\ given\\.$#" count: 1 path: ../../../src/command/defaults/TimingsCommand.php