blob: 22fba969c8405b61e043dfb6c46ed167c34cc125 [file] [log] [blame]
RoomModel org.eclipse.etrice.examples.dynamicactors6 {
import room.basic.types.* from "../../../org.eclipse.etrice.modellib.java/model/Types.room"
LogicalSystem LS {
SubSystemRef main: Main
}
SubSystemClass Main {
ActorRef appl: Appl
LogicalThread dflt_thread
}
ActorClass Appl {
Structure {
ActorRef cont: Container
}
Behavior { }
}
ActorClass Container {
Structure {
conjugated Port p0: PC
optional ActorRef opt: Optional2
Binding p0 and opt.p0
}
Behavior {
// this method prints the passed message and then dumps the object tree consisting of actors and ports
Operation dumpTree(msg: string) {
"System.out.println(msg);"
"System.out.println(((org.eclipse.etrice.runtime.java.messaging.RTObject)getRoot()).toStringRecursive());"
}
StateMachine {
Transition init: initial -> CreateOptional2 { }
Transition tr0: CreateOptional2 -> Done {
triggers {
<hello: p0>
}
action {
"dumpTree(\"after received hello\");"
""
"System.out.println(\"received \"+txt);"
"System.out.println(\"Done, enter \'quit\' to exit\");"
}
}
State CreateOptional2 {
entry {
"opt.createOptionalActor(\"Optional2\", getThread());"
"dumpTree(\"after creation of Optional2\");"
""
"// at this point the port isn\'t connected since"
"// the init message isn\'t processed yet"
"// - so no peer port exists"
"p0.sayHello();"
}
}
State Done
}
}
}
ActorClass Optional1 {
Interface {
Port p0: PC
}
Structure {
ActorRef sub1: AC1
Binding p0 and sub1.p0
}
Behavior { }
}
ActorClass Optional2 {
Interface {
Port p0: PC
}
Structure {
ActorRef sub2: AC2
Binding p0 and sub2.p0
}
Behavior { }
}
// the following actor classes are part of the possible optional instance sub trees
ActorClass AC1 {
Interface {
Port p0: PC
}
Structure {
external Port p0
}
Behavior {
StateMachine {
Transition init: initial -> Ready { }
State Ready {
entry {
"p0.hello(\"this is AC1, instance \"+getInstancePath());"
}
}
}
}
}
ActorClass AC2 {
Interface {
Port p0: PC
}
Structure {
ActorRef deep_sub: AC3
Binding p0 and deep_sub.p0
}
Behavior { }
}
ActorClass AC3 {
Interface {
Port p0: PC
}
Structure {
optional ActorRef nestedOpt: Optional1
Binding p0 and nestedOpt.p0
}
Behavior {
StateMachine {
Transition init: initial -> Ready { }
State Ready {
entry {
"nestedOpt.createOptionalActor(\"Optional1\", getThread());"
}
}
}
}
}
// a simple protocol that is used to demonstrate that actors are connected
ProtocolClass PC {
incoming {
Message sayHello()
}
outgoing {
Message hello(txt: string)
}
}
}