| 
<?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();
 
 
 |