<?php /** @noinspection PhpUnusedParameterInspection */
/** @noinspection DuplicatedCode */
use Eftec\MultiOne\MultiOne;
include __DIR__ . '/../vendor/autoload.php';
function factoryBody($taskInit,$taskEnd,$current): array
{
return [
'task'=>['init'=>$taskInit,'end'=>$taskEnd],
'done'=>$current
];
}
/** @noinspection PhpUnhandledExceptionInspection */
MultiOne::Factory(
1000, // every miliseconds
basename(__FILE__), // the url to call
)->setMethods(
static function($numWorkers):array { // the initial call
echo "<h1>Example 2</h1>";
echo "This examples requires to do 100 operations in 4 workers.<br>";
echo "So, every worker must do 25 operations<br>";
$result=[];
$numOper=100;
$split=ceil($numOper/$numWorkers);
for($instance=0; $instance<$numWorkers; $instance++) {
$result[$instance]=factoryBody($split*$instance,($split*$instance)+$split,$split*$instance);
}
return $result;
},
static function($idWorker,$body):array { // the worker call
$body['done'] += 1;
if($body['done']>=$body['task']['end']) {
$body['done']='ok';
return ['type'=>'end','result'=>$body,'ui'=>'done'];
}
usleep(random_int(500, 1500));
return ['result'=>$body, 'ui'=>"#$idWorker {$body['done']}"];
},
static function($body) { // the worker-end call
echo "all worker ended";
}
)->setUI(
'<div id="PREFIX_content">%s</div>', // how the content is draw
'<div id="PREFIX_worker_%s" style="border:solid 1px"></div><div id="PREFIX_worker_error_%s" style="border:solid 1px; color:red"></div>', // how every worker is draw
'<div id="PREFIX_worker_end"></div>', // how the worker-end is draw.
'' // no loading ui
)->runAuto();
|