Initial commit
This commit is contained in:
@@ -0,0 +1,38 @@
|
||||
<?php
|
||||
|
||||
namespace NoccyLabs\React\Utilities;
|
||||
|
||||
use React\EventLoop\Loop;
|
||||
use React\EventLoop\LoopInterface;
|
||||
|
||||
function defer(callable $func, ?LoopInterface $loop = null): void {
|
||||
if ($loop) {
|
||||
$loop->futureTick($func);
|
||||
} else {
|
||||
Loop::futureTick($func);
|
||||
}
|
||||
}
|
||||
|
||||
// $_RU_CONSUMING = false;
|
||||
// $_RU_ENQUEUED = [];
|
||||
|
||||
function enqueue(callable $func): void {
|
||||
global $_RU_ENQUEUED, $_RU_CONSUMING;
|
||||
if (!isset($_RU_ENQUEUED)) $_RU_ENQUEUED = [];
|
||||
array_push($_RU_ENQUEUED, $func);
|
||||
if (!$_RU_CONSUMING) {
|
||||
$_RU_CONSUMING = true;
|
||||
defer(consume(...));
|
||||
}
|
||||
}
|
||||
|
||||
function consume(): void {
|
||||
global $_RU_ENQUEUED, $_RU_CONSUMING;
|
||||
if (count($_RU_ENQUEUED) == 0) {
|
||||
$_RU_CONSUMING = false;
|
||||
return;
|
||||
}
|
||||
$func = array_shift($_RU_ENQUEUED);
|
||||
call_user_func($func);
|
||||
defer(consume(...));
|
||||
}
|
||||
Reference in New Issue
Block a user