Skip to content

Commit a40c632

Browse files
committed
feat: add jobController state machine
1 parent 16f9940 commit a40c632

7 files changed

Lines changed: 104 additions & 0 deletions

File tree

.idea/.gitignore

Lines changed: 10 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/Cirrina-CSML-SmartFactory.iml

Lines changed: 9 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/ktfmt.xml

Lines changed: 6 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/misc.xml

Lines changed: 7 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/modules.xml

Lines changed: 8 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/vcs.xml

Lines changed: 6 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

smartFactory/jobController.pkl

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
import
2+
"https://raw.githubusercontent.com/CollaborativeStateMachines/Cirrina/refs/heads/develop/src/main/resources/pkl/csm/csml.pkl"
3+
4+
import "events.pkl" as Events
5+
import "variables.pkl" as Vars
6+
7+
jobControllerFSM = new csml.StateMachine {
8+
transient {
9+
["totalProducts"] = "5"
10+
}
11+
12+
states {
13+
["startingState"] = new csml.Initial {
14+
entry {
15+
new csml.Emit {
16+
event {
17+
topic = Events.eProcessMessage
18+
data { ["msg"] = "'Job started...'" }
19+
}
20+
target = "'messageProcessor'"
21+
}
22+
}
23+
24+
always {
25+
new csml.Transition {
26+
to = "runningState"
27+
}
28+
}
29+
}
30+
31+
["runningState"] {
32+
on {
33+
[Events.eProductComplete] {
34+
yields {
35+
new csml.Eval { expression = "\(Vars.vProductsCompleted) += 1" }
36+
new csml.Emit { event = new csml.Internal { topic = Events.eCheckJobDone } }
37+
}
38+
}
39+
40+
[Events.eCheckJobDone] {
41+
to = "jobDoneState"
42+
provided = "\(Vars.vProductsCompleted) >= totalProducts"
43+
}
44+
}
45+
}
46+
47+
["jobDoneState"] = new csml.Terminal {
48+
entry {
49+
new csml.Eval { expression = "\(Vars.vIsJobDone) = true" }
50+
new csml.Emit {
51+
event { topic = Events.eProcessMessage; data { ["msg"] = "'Job done...'" } }
52+
target = "'messageProcessor'"
53+
}
54+
new csml.Emit { event { topic = Events.eJobDone } }
55+
}
56+
}
57+
}
58+
}

0 commit comments

Comments
 (0)