| RoomModel org.eclipse.etrice.examples.dynamicactors9 { |
| |
| import room.basic.service.timing.* from "../../../org.eclipse.etrice.modellib.java/model/TimingService.room" |
| |
| LogicalSystem LogSys1 { |
| SubSystemRef subSysRef1: SubSysClass1 |
| } |
| |
| SubSystemClass SubSysClass1 { |
| ActorRef actorRef1: PingPongTop |
| ActorRef timingService: ATimingService |
| LayerConnection ref actorRef1 satisfied_by timingService.timer |
| LogicalThread defaultThread |
| } |
| |
| ActorClass PingPongTop { |
| Structure { |
| ActorRef container: Container |
| } |
| Behavior { } |
| } |
| |
| ActorClass Container { |
| Structure { |
| optional ActorRef pp: PingPong |
| } |
| Behavior { |
| StateMachine { |
| Transition init: initial -> Running { } |
| State Running { |
| entry '''pp.createOptionalActor("PingPong", getThread());''' |
| } |
| } |
| } |
| } |
| |
| ActorClass PingPong { |
| Structure { |
| ActorRef receiver: Receiver |
| ActorRef sender: Sender |
| Binding receiver.sender and sender.receiver |
| } |
| Behavior { } |
| } |
| ActorClass Sender { |
| Interface { |
| conjugated Port receiver: PingPongProtocol |
| } |
| Structure { |
| external Port receiver |
| } |
| Behavior { |
| StateMachine { |
| Transition init: initial -> SendingPing { } |
| Transition tr0: SendingPing -> ReceivedPong { |
| triggers { |
| <pong: receiver> |
| } |
| } |
| State SendingPing { |
| entry '''receiver.ping();''' |
| } |
| State ReceivedPong { |
| entry '''System.out.println("Done, enter 'quit' to exit");''' |
| } |
| } |
| } |
| } |
| |
| ActorClass Receiver { |
| Interface { |
| Port sender: PingPongProtocol |
| } |
| Structure { |
| external Port sender |
| SAP timing: PTimer |
| } |
| Behavior { |
| StateMachine { |
| Transition init: initial -> WaitingForPing { } |
| Transition tr0: WaitingForPing -> WaitingForAWhile { |
| triggers { |
| <ping: sender> |
| } |
| } |
| Transition tr1: WaitingForAWhile -> SentPong { |
| triggers { |
| <timeout: timing> |
| } |
| } |
| State WaitingForPing |
| State WaitingForAWhile { |
| entry '''timing.startTimeout(1000);''' |
| } |
| State SentPong { |
| entry '''sender.pong();''' |
| } |
| } |
| } |
| } |
| |
| ProtocolClass PingPongProtocol { |
| incoming { |
| Message ping() |
| } |
| outgoing { |
| Message pong() |
| } |
| } |
| |
| } |