Skip to main content
aboutsummaryrefslogtreecommitdiffstats
blob: 2cffc8378d75ab49dd7807f28fef1db8e2725049 (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
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
RoomModel PingPongThreadTestReplPort {

	import room.basic.service.timing.* from "TimingService.room"
	import room.basic.types.* from "Types.room"

	LogicalSystem System_PingPong {
		SubSystemRef subsystem: SubSystem_PingPong
	}

	SubSystemClass SubSystem_PingPong {
		ActorRef application: PingPongTop
		ActorRef services: ATimingService
		LayerConnection ref application satisfied_by services.timer
		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.PingPongPort3 and MrPong3.PingPongPort
		}
		Behavior { }
	}

	ActorClass MrPingActor {
		Interface {
			conjugated Port PingPongPort [*]: PingPongProtocol
			conjugated Port PingPongPort3 : PingPongProtocol 
		}
		Structure {
			external Port PingPongPort
			external Port PingPongPort3
			SAP timer: PTimer
			Attribute count : int32
			Attribute pongCount : int32
			Attribute caseId: int32
			Attribute resultlist[23]: int16 = "{1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23}"
			
		}
		Behavior {
			Operation MrPingActor() {
				"caseId = etUnit_openAll(\"tmp\", \"PingPongThreadTestReplPort\", \"org.eclipse.etrice.generator.common.tests.PingPongThreadTestReplPort\", \"PingPongThreadTestReplPort_case\");"
			}
			Operation ~MrPingActor() {
				"etUnit_closeAll(caseId);"
			}
			StateMachine {
				Transition tr0: initial -> waitForTimer {
					action {
						"count = 0;"
						"timer.startTimeout(50);"
						"EXPECT_ORDER_START(caseId,resultlist,23);"
						"EXPECT_ORDER(caseId,\"<|MODEL_LOCATION|>\", 1);"
					}
				}
				Transition tr1: waitForTimer -> waitForPong {
					triggers {
						<timeout: timer>
					}
					action {
						"PingPongPort.get(0).ping();"
						"PingPongPort.get(1).ping();"
						"pongCount = 0;"
					}
				}
				Transition tr3: waitForPong -> cp cp0 {
					triggers {
						<pong: PingPongPort>					
					}
					action {
						"pongCount++;"
					}
				}
				Transition tr5: cp cp0 -> cp cp1 {
					action {
						"System.out.println(count);"
					}
				}
				Transition tr6: cp cp0 -> waitForPong {
					cond {
						"pongCount < 2"
					}
				}
				Transition tr2: cp cp1 -> test_finished
				Transition tr4: cp cp1 -> waitForTimer {
					cond {
						"count<20"
					}
					action {
						"timer.startTimeout(5);"
						"EXPECT_ORDER(caseId,\"<|MODEL_LOCATION|>\", count+2);"
						"count++;"
					}
				}
				ChoicePoint cp0
				ChoicePoint cp1
				State waitForTimer
				State waitForPong
				State test_finished {
					entry {
						"EXPECT_ORDER(caseId,\"<|MODEL_LOCATION|>\", 22);"
						"EXPECT_ORDER_END(caseId,\"<|MODEL_LOCATION|>\", 23);"
						"etUnit_testFinished(caseId);"
					}
				}
			}
		}
	}

	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()
		}
	}

}

Back to the top