Initial commit - Last War messaging system
This commit is contained in:
62
vendor/team-reflex/discord-php/tests/functions.php
vendored
Executable file
62
vendor/team-reflex/discord-php/tests/functions.php
vendored
Executable file
@@ -0,0 +1,62 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
/*
|
||||
* This file is a part of the DiscordPHP project.
|
||||
*
|
||||
* Copyright (c) 2015-present David Cole <david.cole1340@gmail.com>
|
||||
*
|
||||
* This file is subject to the MIT license that is bundled
|
||||
* with this source code in the LICENSE.md file.
|
||||
*/
|
||||
|
||||
const TIMEOUT = 10;
|
||||
|
||||
function wait(callable $callback, float $timeout = TIMEOUT, callable $timeoutFn = null)
|
||||
{
|
||||
$discord = DiscordSingleton::get();
|
||||
|
||||
$result = null;
|
||||
$finally = null;
|
||||
$timedOut = false;
|
||||
|
||||
$discord->getLoop()->futureTick(function () use ($callback, $discord, &$result, &$finally) {
|
||||
$resolve = function ($x = null) use ($discord, &$result) {
|
||||
$result = $x;
|
||||
$discord->getLoop()->stop();
|
||||
};
|
||||
|
||||
try {
|
||||
$finally = $callback($discord, $resolve);
|
||||
} catch (\Throwable $e) {
|
||||
$resolve($e);
|
||||
}
|
||||
});
|
||||
|
||||
$timeout = $discord->getLoop()->addTimer($timeout, function () use ($discord, &$timedOut) {
|
||||
$timedOut = true;
|
||||
$discord->getLoop()->stop();
|
||||
});
|
||||
|
||||
$discord->getLoop()->run();
|
||||
$discord->getLoop()->cancelTimer($timeout);
|
||||
|
||||
if ($result instanceof Exception) {
|
||||
throw $result;
|
||||
}
|
||||
|
||||
if (is_callable($finally)) {
|
||||
$finally();
|
||||
}
|
||||
|
||||
if ($timedOut) {
|
||||
if ($timeoutFn != null) {
|
||||
$timeoutFn();
|
||||
} else {
|
||||
throw new \Exception('Timed out');
|
||||
}
|
||||
}
|
||||
|
||||
return $result;
|
||||
}
|
||||
Reference in New Issue
Block a user