PHP code example of futoin / core-php-ri-asyncsteps
1. Go to this page and download the library: Download futoin/core-php-ri-asyncsteps library . Choose the download type require .
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
futoin / core-php-ri-asyncsteps example snippets
use \FutoIn\RI\AsyncSteps;
use \FutoIn\RI\ScopedSteps;
$root_as = new ScopedSteps();
$root_as->add(
function( $as ){
$as->success( "MyValue" );
}
)->add(
function( $as, $arg ){
if ( $arg === 'MyValue' )
{
$as->add( function( $as ){
$as->error( 'MyError', 'Something bad has happened' );
});
}
$as->successStep();
},
function( $as, $err )
{
if ( $err === 'MyError' )
{
$as->success( 'NotSoBad' );
}
}
);
$root_as->add(
function( $as, $arg )
{
if ( $arg === 'NotSoBad' )
{
echo 'MyError was ignored: ' . $as->state()->error_info . PHP_EOL;
}
$as->state()->p1arg = 'abc';
$as->state()->p2arg = 'xyz';
$p = $as->parallel();
$p->add( function( $as ){
echo 'Parallel Step 1' . PHP_EOL;
$as->add( function( $as ){
echo 'Parallel Step 1->1' . PHP_EOL;
$as->p1 = $as->p1arg . '1';
$as->success();
} );
} )
->add( function( $as ){
echo 'Parallel Step 2' . PHP_EOL;
$as->add( function( $as ){
echo 'Parallel Step 2->1' . PHP_EOL;
$as->p2 = $as->p2arg . '2';
$as->success();
} );
} );
}
)->add( function( $as ){
echo 'Parallel 1 result: ' . $as->state()->p1 . PHP_EOL;
echo 'Parallel 2 result: ' . $as->p2 . PHP_EOL;
} );
// Note: we use ScopedSteps instead of AsyncSteps in this example
//$root_as->execute();
$root_as->run();
use \FutoIn\RI\AsyncSteps;
use \FutoIn\RI\ScopedSteps;
use \FutoIn\RI\AsyncTool;
function dummy_service_read( $success, $error ){
// We expect it calles success when data is available
// and error, if error occurs
// Returns some request handle
return null;
}
function dummy_service_cancel( $reqhandle ){
// We assume it cancels previously scheduled reqhandle
}
$root_as = new ScopedSteps();
$root_as->add( function( $as ){
AsyncTool::callLater( function() use ( $as ) {
$as->success( 'async success()' );
} );
$as->setTimeout( 10 ); // ms
} )->add(
function( $as, $arg ){
echo $arg . PHP_EOL;
$reqhandle = dummy_service_read(
function( $data ) use ( $as ) {
$as->success( $data );
},
function( $err ) use ( $as ) {
if ( $err !== 'SomeSpecificCancelCode' )
{
$as->error( $err );
}
}
);
$as->setCancel(function($as) use ( $reqhandle ) {
dummy_service_cancel( $reqhandle );
});
// OPTIONAL. Set timeout of 1s
$as->setTimeout( 1000 );
},
function( $as, $err )
{
echo $err . ": " . $as->error_info . PHP_EOL;
}
);
// Note: we use ScopedSteps instead of AsyncSteps in this example
//$root_as->execute();
$root_as->run();
use \FutoIn\RI\AsyncSteps;
use \FutoIn\RI\AsyncToolTest;
// Note, we have no default event engine in PHP
AsyncToolTest::init();
$model_as = new AsyncSteps();
$model_as->state()->variable = 'Vanilla';
$model_as->add( function($as){
echo '-----' . PHP_EOL;
echo 'Hi! I am from model_as' . PHP_EOL;
echo 'State.var: ' . $as->variable . PHP_EOL;
$as->variable = 'Dirty';
$as->success();
});
for ( $i = 0; $i < 3; ++$i )
{
$root_as = new AsyncSteps();
$root_as->copyFrom( $model_as );
$root_as->add( function( $as ) use ( $model_as ) {
$as->add( function( $as ){
echo '>> The first inner step' . PHP_EOL;
$as->success();
});
$as->copyFrom( $model_as );
$as->successStep();
});
$root_as->execute();
}
// Process all pending events
AsyncToolTest::run();
sh
$ composer