| RoomModel DynamicActorTest6 { |
| |
| import room.basic.types.int32 |
| import room.basic.types.string |
| import room.basic.test.TestInstance |
| |
| ActorClass Appl { |
| @TestInstance |
| Structure { |
| ActorRef ctrl: Controller |
| } |
| Behavior { |
| } |
| } |
| |
| ActorClass Controller { |
| Structure { |
| conjugated Port pcont: PCtrl |
| conjugated Port pout: PC |
| conjugated Port pin: PC |
| Attribute caseId: int32 |
| ActorRef cont: Container |
| Binding pcont and cont.fct |
| Binding pout and cont.pin |
| Binding pin and cont.pout |
| } |
| Behavior { |
| ctor '''caseId = etUnit_openAll("log", "DynamicActorTest6", "org.eclipse.etrice.generator.java.tests.DynamicActorTest6", "DynamicActorTest6_case");''' |
| dtor '''etUnit_closeAll(caseId);''' |
| StateMachine { |
| Transition init: initial -> CreateOptionals { |
| } |
| Transition tr0: CreateOptionals -> Sending { |
| triggers { |
| <done: pcont> |
| } |
| } |
| Transition tr1: Sending -> Destroy { |
| triggers { |
| <hello: pin> |
| } |
| action '''System.out.println("Controller received: "+transitionData);''' |
| } |
| Transition tr2: Destroy -> CreateAgain { |
| triggers { |
| <done: pcont> |
| } |
| } |
| Transition tr3: CreateAgain -> SendAgain { |
| triggers { |
| <done: pcont> |
| } |
| } |
| Transition tr4: SendAgain -> Done { |
| triggers { |
| <hello: pin> |
| } |
| action '''System.out.println("Controller received: "+transitionData);''' |
| } |
| State CreateOptionals { |
| entry '''pcont.createOpts();''' |
| } |
| State Sending { |
| entry '''pout.sayHello();''' |
| } |
| State Done { |
| entry '''etUnit_testFinished(caseId);''' |
| } |
| State Destroy { |
| entry '''pcont.destroyOpts();''' |
| } |
| State CreateAgain { |
| entry '''pcont.createOpts();''' |
| } |
| State SendAgain { |
| entry '''pout.sayHello();''' |
| } |
| } |
| } |
| } |
| |
| ActorClass Container { |
| Interface { |
| Port fct: PCtrl |
| Port pout: PC |
| Port pin: PC |
| } |
| Structure { |
| external Port fct |
| optional ActorRef opt1: Optional1 |
| optional ActorRef opt2: Optional2 |
| Binding opt1.pout and opt2.pin |
| Binding pin and opt1.pin |
| Binding pout and opt2.pout |
| } |
| Behavior { |
| |
| // 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 -> Ready { |
| } |
| Transition tr0: Ready -> Ready { |
| triggers { |
| <createOpts: fct> |
| } |
| action ''' |
| opt1.createOptionalActor("Optional1", getThread()); |
| opt2.createOptionalActor("Optional2", getThread()); |
| dumpTree("after creation of op1 and opt2"); |
| fct.done();''' |
| } |
| Transition tr1: Ready -> Ready { |
| triggers { |
| <destroyOpts: fct> |
| } |
| action ''' |
| opt1.destroyOptionalActor(); |
| opt2.destroyOptionalActor(); |
| fct.done();''' |
| } |
| State Ready |
| } |
| } |
| } |
| |
| ActorClass Optional1 { |
| Interface { |
| Port pout: PC |
| Port pin: PC |
| } |
| Structure { |
| ActorRef sub1: AC1 |
| Binding pin and sub1.pin |
| Binding pout and sub1.pout |
| } |
| Behavior { |
| } |
| } |
| |
| ActorClass Optional2 { |
| Interface { |
| Port pout: PC |
| conjugated Port pin: PC |
| } |
| Structure { |
| ActorRef sub2: AC2 |
| Binding pout and sub2.pout |
| Binding pin and sub2.pin |
| } |
| Behavior { |
| } |
| } |
| |
| ActorClass AC1 { |
| Interface { |
| Port pout: PC |
| Port pin: PC |
| } |
| Structure { |
| external Port pout |
| external Port pin |
| } |
| Behavior { |
| StateMachine { |
| Transition init: initial -> Ready { |
| } |
| Transition tr0: Ready -> Ready { |
| triggers { |
| <sayHello: pin> |
| } |
| action '''pout.hello("this is AC1, instance "+getInstancePath());''' |
| } |
| State Ready |
| } |
| } |
| } |
| |
| ActorClass AC2 { |
| Interface { |
| Port pout: PC |
| conjugated Port pin: PC |
| } |
| Structure { |
| external Port pout |
| external Port pin |
| } |
| Behavior { |
| StateMachine { |
| Transition init: initial -> Ready { |
| } |
| Transition tr0: Ready -> Ready { |
| triggers { |
| <hello: pin> |
| } |
| action ''' |
| System.out.println("AC2 received "+transitionData); |
| |
| pout.hello("AC2: forwarding "+transitionData);''' |
| } |
| State Ready |
| } |
| } |
| } |
| |
| ProtocolClass PC { |
| incoming { |
| Message sayHello() |
| } |
| outgoing { |
| Message hello(string) |
| } |
| } |
| |
| ProtocolClass PCtrl { |
| incoming { |
| Message createOpts() |
| Message destroyOpts() |
| } |
| outgoing { |
| Message done() |
| } |
| } |
| } |