blob: 41ad806c5de5dea9c51e844e1e02cec217c2515b (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
|
RoomModel org.eclipse.etrice.integration.PingPongThreadTestReplPort {
import room.basic.service.timing.* from "../../../runtime/org.eclipse.etrice.modellib/models/TimingService.room"
LogicalSystem System_PingPongReplPort {
SubSystemRef subsystem: SubSystem_PingPongReplPort
}
SubSystemClass SubSystem_PingPongReplPort {
ActorRef application: PingPongTop
ActorRef services: ATimingService
LayerConnection ref application satisfied_by services.timer
LayerConnection ref application satisfied_by services.timeout
LogicalThread mrPingThread prio=5 {application.MrPing}
LogicalThread mrPong1Thread prio=5 {application.MrPong1}
LogicalThread mrPong2Thread prio=5 {application.MrPong2}
LogicalThread mrPong3Thread prio=5 {application.MrPong3}
}
ActorClass PingPongTop {
Structure {
ActorRef MrPing: MrPingActor
ActorRef MrPong1: MrPongActor1
ActorRef MrPong2: MrPongActor1
ActorRef MrPong3: MrPongActor1
Binding MrPing.PingPongPort and MrPong1.PingPongPort
Binding MrPing.PingPongPort and MrPong2.PingPongPort
Binding MrPing.PingPongPort and MrPong3.PingPongPort
}
Behavior { }
}
ActorClass MrPingActor {
Interface {
conjugated Port PingPongPort [3] : PingPongProtocol
}
Structure {
usercode1 {
"import org.eclipse.etrice.runtime.java.messaging.RTServices;"
}
external Port PingPongPort
SAP timer: PTimeout
Attribute count : int32
Attribute pongCount : int32
}
Behavior {
StateMachine {
Transition tr0: initial -> waitForTimer {
action {
"count = 0;"
"timer.Start(1000);"
}
}
Transition tr1: waitForTimer -> waitForPong {
triggers {
<timeoutTick: timer>
}
action {
"PingPongPort.get(0).ping();"
"PingPongPort.get(1).ping();"
"PingPongPort.get(2).ping();"
"pongCount = 0;"
}
}
Transition tr3: waitForPong -> cp cp0 {
triggers {
<pong: PingPongPort>
}
action {
"pongCount++;"
}
}
Transition tr4: cp cp0 -> waitForTimer {
action {
"if (count++ > 1000) {"
"RTServices.getInstance().getSubSystem().testFinished(0);"
"} else {"
"//PingPongPort.get(0).ping();"
"//PingPongPort.get(1).ping();"
"//PingPongPort.get(2).ping();"
"System.out.println(pongCount);"
"System.out.println(count);"
"pongCount = 0;"
"timer.Start(10);"
"}"
}
}
Transition tr6: cp cp0 -> waitForPong {
cond {
"pongCount < 3"
}
}
ChoicePoint cp0
State waitForTimer
State waitForPong
}
}
}
ActorClass MrPongActor1 {
Interface {
Port PingPongPort: PingPongProtocol
}
Structure {
external Port PingPongPort
}
Behavior {
StateMachine {
Transition tr0: initial -> waitForPing { }
Transition myTrigger: waitForPing -> waitForPing {
triggers {
<ping: PingPongPort>
}
action {
"PingPongPort.pong();"
}
}
State waitForPing
}
}
}
ProtocolClass PingPongProtocol {
incoming {
Message ping()
}
outgoing {
Message pong()
}
}
}
|