[
MAINHACK
]
Mail Test
BC
Config Scan
HOME
Create...
New File
New Folder
Viewing / Editing File: Deferred.php
<?php declare(strict_types=1); namespace Http\Client\Common; use Http\Promise\Promise; use Psr\Http\Client\ClientExceptionInterface; use Psr\Http\Message\ResponseInterface; /** * A deferred allow to return a promise which has not been resolved yet. */ final class Deferred implements Promise { /** * @var ResponseInterface|null */ private $value; /** * @var ClientExceptionInterface|null */ private $failure; /** * @var string */ private $state; /** * @var callable */ private $waitCallback; /** * @var callable[] */ private $onFulfilledCallbacks; /** * @var callable[] */ private $onRejectedCallbacks; public function __construct(callable $waitCallback) { $this->waitCallback = $waitCallback; $this->state = Promise::PENDING; $this->onFulfilledCallbacks = []; $this->onRejectedCallbacks = []; } public function then(?callable $onFulfilled = null, ?callable $onRejected = null): Promise { $deferred = new self($this->waitCallback); $this->onFulfilledCallbacks[] = function (ResponseInterface $response) use ($onFulfilled, $deferred) { try { if (null !== $onFulfilled) { $response = $onFulfilled($response); } $deferred->resolve($response); } catch (ClientExceptionInterface $exception) { $deferred->reject($exception); } }; $this->onRejectedCallbacks[] = function (ClientExceptionInterface $exception) use ($onRejected, $deferred) { try { if (null !== $onRejected) { $response = $onRejected($exception); $deferred->resolve($response); return; } $deferred->reject($exception); } catch (ClientExceptionInterface $newException) { $deferred->reject($newException); } }; return $deferred; } public function getState(): string { return $this->state; } /** * Resolve this deferred with a Response. */ public function resolve(ResponseInterface $response): void { if (Promise::PENDING !== $this->state) { return; } $this->value = $response; $this->state = Promise::FULFILLED; foreach ($this->onFulfilledCallbacks as $onFulfilledCallback) { $onFulfilledCallback($response); } } /** * Reject this deferred with an Exception. */ public function reject(ClientExceptionInterface $exception): void { if (Promise::PENDING !== $this->state) { return; } $this->failure = $exception; $this->state = Promise::REJECTED; foreach ($this->onRejectedCallbacks as $onRejectedCallback) { $onRejectedCallback($exception); } } public function wait($unwrap = true) { if (Promise::PENDING === $this->state) { $callback = $this->waitCallback; $callback(); } if (!$unwrap) { return null; } if (Promise::FULFILLED === $this->state) { return $this->value; } if (null === $this->failure) { throw new \RuntimeException('Internal Error: Promise is not fulfilled but has no exception stored'); } throw $this->failure; } }
Save Changes
Cancel / Back
Close ×
Server Info
Hostname: server1.winmanyltd.com
Server IP: 203.161.60.52
PHP Version: 8.3.27
Server Software: Apache
System: Linux server1.winmanyltd.com 4.18.0-553.22.1.el8_10.x86_64 #1 SMP Tue Sep 24 05:16:59 EDT 2024 x86_64
HDD Total: 117.98 GB
HDD Free: 59.81 GB
Domains on IP: N/A (Requires external lookup)
System Features
Safe Mode:
Off
disable_functions:
None
allow_url_fopen:
On
allow_url_include:
Off
magic_quotes_gpc:
Off
register_globals:
Off
open_basedir:
None
cURL:
Enabled
ZipArchive:
Enabled
MySQLi:
Enabled
PDO:
Enabled
wget:
Yes
curl (cmd):
Yes
perl:
Yes
python:
Yes (py3)
gcc:
Yes
pkexec:
Yes
git:
Yes
User Info
Username: eliosofonline
User ID (UID): 1002
Group ID (GID): 1003
Script Owner UID: 1002
Current Dir Owner: 1002