Hi Henrik,
I now can create dynamic actors though
I need to cache them and according to the event coming on TCP
update their state. How do I cache them and get them back from
cache based on the id and call a method to make the
transition to next state?
Thanks
-v
RoomModel
room.basic.service.oms {
import
room.basic.types.*
from
"Types.room"
import
room.basic.data.*
from
"Order.room"
ActorClass
AOrderStateService {
Interface {
SPP
process: ProcessEvent
}
Structure {
usercode1 {
"import
java.util.Iterator;
import java.util.Map.Entry;
import java.util.concurrent.ConcurrentHashMap;"
}
usercode2 {
"private
ConcurrentHashMap<String, Integer> cache ;"
}
conjugated
Port
p0[*]: ProcessEvent
optional
ActorRef
optarray[*]: OrderStateHandler
ServiceImplementation
of
process
Binding
p0
and
optarray.p0
Attribute
id: int32
}
Behavior {
Operation
dumpTree(msg: string) {
"System.out.println(msg);"
"System.out.println(((org.eclipse.etrice.runtime.java.messaging.RTObject)getRoot()).toStringRecursive());"
}
StateMachine {
Transition
init:
initial
-> Process {
action {
"cache
= new ConcurrentHashMap<>(16,0.9f,2);"
"System.out.println(\"cache
initialized\");\r"
""
"dumpTree(\"before
creation of anything\");"
}
}
Transition
tr0: Process -> Process {
triggers {
<handleEvent: process>
}
action {
""
"dumpTree(\"before
creation of Order\");"
"System.out.println(order.getId()+\"
\"+order.getMsgType()+\" \"+order.getExecType());"
""
""
"if(cache.containsKey(order.getId()))"
"{"
""
"int
idx=cache.get(order.getId());"
""
"}"
"else{"
"id++;"
"optarray.createOptionalActor(\"MyOrderStateHandler\",
getThread());"
"cache.put(order.getId(),
id);"
"}"
"dumpTree(\"after
processing of Order\");"
""
}
}
State
Process
}
}
}
abstract
ActorClass
OrderStateHandler {
Interface {
Port
p0: ProcessEvent
}
Structure {
external
Port
p0
Attribute
id: string
Attribute
data: Order
}
Behavior {
}
}
ActorClass
MyOrderStateHandler
extends
OrderStateHandler {
Structure {
}
Behavior {
StateMachine {
Transition
init:
initial
-> PNew {
action {
"System.out.println(\"????
\");
"
}
}
Transition
tr0: PNew -> New {
triggers {
<handleEvent: p0
guard {
"order.getMsgType().equals(\"8\")
&& order.getExecType().equals(\"0\")"
}>
}
}
Transition
tr1: New -> Fill {
triggers {
<handleEvent: p0
guard {
"order.getMsgType().equals(\"8\")
&& order.getExecType().equals(\"F\")"
}>
}
}
State
PNew {
entry {
"System.out.println(\"Pending
NEW\");"
}
}
State
New {
entry {
"System.out.println(\"NEW\");"
}
}
State
Fill {
entry {
"System.out.println(\"Fill\");"
}
}
}
}
}
ProtocolClass
ProcessEvent {
incoming {
Message
handleEvent(order: Order)
}
}
}