| /* |
| * Shortkeys: |
| * Ctrl+Space - content assist |
| * F3 - open declaration of selected element |
| * Alt+S - open structure diagram |
| * Alt+B - open behavior diagram |
| * Alt+M - open textual editor (in diagrams) |
| */ |
| RoomModel PingPong { |
| |
| import etrice.api.types.* |
| import etrice.api.timer.PTimer |
| import etrice.api.timer.ATimerService |
| |
| LogicalSystem LogSys { |
| SubSystemRef subSystemRef: SubSysClass |
| } |
| |
| SubSystemClass SubSysClass { |
| ActorRef topActor: TopActor |
| ActorRef timingService: ATimerService |
| LayerConnection ref topActor satisfied_by timingService.timer |
| LogicalThread defaultThread |
| } |
| |
| // - build your application from here |
| ActorClass TopActor { |
| Structure { |
| ActorRef sender: Sender |
| ActorRef receiver: Receiver |
| Binding sender.sendPort and receiver.recvPort |
| } |
| Behavior { |
| } |
| } |
| |
| // - PingPong building kit |
| ActorClass Sender { |
| Interface { |
| conjugated Port sendPort: PingPongProtocol |
| } |
| Structure { |
| external Port sendPort |
| } |
| Behavior { |
| StateMachine { |
| Transition init: initial -> sendingPing |
| Transition tr0: sendingPing -> receivedPong { |
| triggers { |
| <pong: sendPort> |
| } |
| } |
| State sendingPing { |
| entry '''sendPort.ping();''' |
| } |
| State receivedPong |
| } |
| } |
| } |
| |
| ActorClass Receiver { |
| Interface { |
| Port recvPort: PingPongProtocol |
| } |
| Structure { |
| external Port recvPort |
| SAP timingService: PTimer |
| } |
| Behavior { |
| StateMachine { |
| Transition init: initial -> waitingForPing |
| Transition tr0: waitingForPing -> receivedPing { |
| triggers { |
| <ping: recvPort> |
| } |
| } |
| Transition tr1: receivedPing -> sentPong { |
| triggers { |
| <timeout: timingService> |
| } |
| } |
| State waitingForPing |
| State receivedPing { |
| entry '''timingService.startTimeout(500);''' |
| } |
| State sentPong { |
| entry '''recvPort.pong();''' |
| } |
| } |
| } |
| } |
| |
| ProtocolClass PingPongProtocol { |
| incoming { |
| Message ping() |
| } |
| outgoing { |
| Message pong() |
| } |
| } |
| } |