PHP Classes

File: examples/example2.php

Recommend this page to a friend!
  Classes of Jorge Castro   MultiOne   examples/example2.php   Download  
File: examples/example2.php
Role: Example script
Content type: text/plain
Description: Example script
Class: MultiOne
Execute many tasks in parallel using JavaScript
Author: By
Last change:
Date: 2 days ago
Size: 1,846 bytes
 

Contents

Class file image Download
<?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();