Skip to main content
aboutsummaryrefslogtreecommitdiffstats
blob: 0a4d3d8c00f3aab1b5c1c87ba9d345eb95b45afa (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
RoomModel DynamicActorTest5 {
	
	import room.basic.test.* from "../../../runtime/org.eclipse.etrice.modellib.java/model/Tests.room"
	import room.basic.types.* from "../../../runtime/org.eclipse.etrice.modellib.java/model/Types.room"
	
	ActorClass Appl {
		@TestInstance
		Structure {
			ActorRef cont: Container
		}
		Behavior { }
	}
	
	ActorClass Container {
		Structure {
			conjugated Port p0: PC
			Attribute caseId: int32
			optional ActorRef opt: Optional2
			
			Binding p0 and opt.p0
		}
		Behavior {
			ctor {
				"caseId = etUnit_openAll(\"log\", \"DynamicActorTest5\", \"org.eclipse.etrice.generator.java.tests.DynamicActorTest5\", \"DynamicActorTest5_case\");"
			}
			dtor {
				"etUnit_closeAll(caseId);"
			}
			
			// 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);"
						""
						"etUnit_testFinished(caseId);"
					}
				}
				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)
		}
	}
}

Back to the top