-
Notifications
You must be signed in to change notification settings - Fork 13
Expand file tree
/
Copy pathexample2withoutdatabase.php
More file actions
97 lines (79 loc) · 3.01 KB
/
example2withoutdatabase.php
File metadata and controls
97 lines (79 loc) · 3.01 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
<?php
use eftec\statemachineone\Job;
use eftec\statemachineone\StateMachineOne;
use eftec\statemachineone\Transition;
include "../vendor/autoload.php";
define("STATE_PICK",1);
define("STATE_CANCEL",2);
define("STATE_TRANSPORT",3);
define("STATE_ABORTTRANSPORT",4);
define("STATE_TODELIVER",5);
define("STATE_HELP",6);
define("STATE_DELIVERED",7);
define("STATE_ABORTED",8);
$smachine=new StateMachineOne(null);
$smachine->setDebug(true);
$smachine->setDefaultInitState(STATE_PICK);
$smachine->fieldDefault=[
'customerpresent'=>null
,'addressnotfound'=>null
,'signeddeliver'=>null
,'abort'=>null
,'instock'=>null
,'picked'=>null];
//$smachine->setdb('mysql','localhost',"root","abc.123","statemachinedb");
//$smachine->createDbTable(true); // you don't need to create this table every time.
$smachine->setStopTrigger(function($smo,$job) {echo "Trigger: job is stopping<br>"; return true;});
//$smachine->loadDBActiveJobs();
$smachine->setStates(
[STATE_PICK=>'STATE_PICK'
,STATE_CANCEL=>'STATE_CANCEL'
,STATE_TRANSPORT=>'STATE_TRANSPORT'
,STATE_ABORTTRANSPORT=>'STATE_ABORTTRANSPORT'
,STATE_TODELIVER=>'STATE_TODELIVER'
,STATE_HELP=>'STATE_HELP'
,STATE_DELIVERED=>'STATE_DELIVERED'
,STATE_ABORTED=>'STATE_ABORTED']);
// if instock = 0 and picked = 1 then change and set instock = 1 , instock = 2
// if _timeout then change and set instock = 1 , instock = 2
$dummy='hello';
function dummy($job) {
echo "<hr>";
var_dump($job);
echo "<hr>";
return 'hello calling dummy';
}
$smachine->addTransition(STATE_PICK,STATE_CANCEL,'when instock2 = 0',"stop");
$smachine->addTransition(STATE_PICK,STATE_TRANSPORT,'when picked = 1 set a1=dummy(_idjob)',"change");
$smachine->addTransition(STATE_TRANSPORT,STATE_TODELIVER,'when addressnotfound = 0',"change");
$smachine->addTransition(STATE_TRANSPORT,STATE_HELP,'when addressnotfound = 1',"change");
$smachine->addTransition(STATE_HELP,STATE_ABORTED,'when addressnotfound = 9999 timeout 1',"stop"); // we wait 2 seconds, then we give it up
$smachine->addTransition(STATE_HELP,STATE_TODELIVER,'when addressnotfound = 0',"change");
$smachine->addTransition(STATE_TODELIVER,STATE_DELIVERED
,'when signeddeliver = 1 set addressnotfound = 0 and customerpresent = 1 timeout 3600',"stop");
$smachine->addEvent('CUSTOMERPRESENT','set addressnotfound = 0 and customerpresent = 1');
$smachine->checkConsistency();
$object=['customerpresent'=>1
,'addressnotfound'=>1
,'signeddeliver'=>1
,'abort'=>-1
,'fieldnotstored'=>'hi' // this field is not store or it's part of the state machine
,'instock'=>1
,'picked'=>1];
$job=$smachine->createJob($object);
$smachine->checkAllJobs();
sleep(2);
$smachine->checkAllJobs();
echo "<hr>";
$object=['customerpresent'=>-1 // undefined
,'addressnotfound'=>-1 // undefined.
,'signeddeliver'=>1
,'abort'=>-1
,'fieldnotstored'=>'hi' // this field is not store
,'instock'=>1
,'picked'=>1];
$job=$smachine->createJob($object);
$smachine->checkAllJobs();
echo "calling event CUSTOMERPRESENT<br>";
$smachine->callEvent('CUSTOMERPRESENT');
$smachine->checkAllJobs();