<?php
/**
* @author Jorge Patricio Castro Castillo <jcastro arroba eftec dot cl>
* @link https://github.com/EFTEC/StateMachineOne
*/
use eftec\statemachineone\Job;
use eftec\statemachineone\StateMachineOne;
use eftec\statemachineone\Transition;
// we use autoload's composer, so we call it here.
include "../vendor/autoload.php";
$smachine=new StateMachineOne();
$smachine->setDebug(true);
// it is specific for this project
define('PARKED',1);
define('IDLING',2);
define('DRIVING',3);
$smachine->setDefaultInitState(PARKED);
$smachine->setStates([
PARKED=>'Parked',
IDLING=>'Idling',
DRIVING=>'Driving'
]);
$smachine->fieldDefault=[
'pedal'=>0
,'turnkey'=>0
,'gas'=>100
,'brake'=>0
,'speed'=>0];
// database configuration
$smachine->tableJobs="car_jobs";
$smachine->tableJobLogs="car_logs"; // it is optional
$smachine->setdb('mysql','localhost',"root","abc.123","statemachinedb");
$smachine->createDbTable(false); // you don't need to create this table every time.
$smachine->loadDBAllJob(); // we load all jobs, including finished ones.
//$smachine->loadDBActiveJobs(); // use this in production, we don't need stopped job every time.
// business rules
$smachine->addTransition(PARKED,IDLING
,'when pedal = 1 and turnkey = 1 and gas > 0');
$smachine->addTransition(IDLING,DRIVING
,'when gas > 0 and speed > 0');
$smachine->addTransition(DRIVING,IDLING
,'when brake = 1 and speed = 0');
$smachine->addTransition(IDLING,PARKED
,'when turnkey = 0 and speed = 0');
$msg=$smachine->fetchUI(); // we show a visual id (it is optional and it's only for debug purpose)
$smachine->checkAllJobs(); // we check every (active,pause,continue) job available.
$smachine->viewUI(null,$msg); // null means it takes the current job
|