blob: 57726f6f62af03741ac776a1e51a49c3df502f63 (
plain) (
tree)
|
|
RoomModel cGenRef {
import room.basic.types.c.* from "CTypes.room"
SubSystemClass SubSys {
ActorRef Receiver: Receiver
ActorRef Sender: Sender
Binding Sender.dataOut and Receiver.dataIn
}
// SubSystemClass SubSysSomewhatBigger {
// ActorRef Receiver: Receiver
// ActorRef Sender: Sender
// ActorRef Broadcast: Broadcast
// ActorRef Receiver2: Receiver
// ActorRef ref0: Broadcast
// ActorRef ref1: Broadcast
// ActorRef ref2: Receiver
// ActorRef ref3: Receiver
// Binding Sender.dataOut and Broadcast.dataIn
// Binding Broadcast.dataOut and ref0.dataIn
// Binding Broadcast.dataOut and ref1.dataIn
// Binding Receiver.dataIn and ref0.dataOut
// Binding Receiver2.dataIn and ref0.dataOut
// Binding ref2.dataIn and ref1.dataOut
// Binding ref3.dataIn and ref1.dataOut
// }
ActorClass Receiver {
Interface {
Port dataIn: CommunicationProtocol
}
Structure {
external Port dataIn
Attribute attr1: DataClass1
}
Behavior {
StateMachine {
Transition init: initial -> Idle { }
Transition tr0: Idle -> DataReceived {
triggers {
<sendData: dataIn>
}
action {
"dataIn.receivedData();"
}
}
State Idle
State DataReceived
}
}
}
ActorClass Broadcast {
Interface {
Port dataIn: CommunicationProtocol
conjugated Port dataOut [2]: CommunicationProtocol
}
Structure {
external Port dataIn
external Port dataOut
}
Behavior {
StateMachine {
Transition init: initial -> Idle { }
Transition tr0: Idle -> tp0 of Sending {
triggers {
<sendData: dataIn>
}
action {
"//dataOut.get(0).sendData(data);"
"//dataOut.get(1).sendData(data);"
"dataOut.sendData(data);"
}
}
Transition tr1: tp1 of Sending -> ReceivedBoth {
action {
"dataIn.receivedData();"
}
}
State Idle
State Sending {
subgraph {
Transition tr0: my tp0 -> WaitingForReceived
Transition tr1: WaitingForReceived -> ReceivedOne {
triggers {
<receivedData: dataOut guard {
"true"
}>
}
}
Transition tr2: WaitingForReceived -> ReceivedTheOther {
triggers {
<receivedData: dataOut guard {
"false"
}>
}
}
Transition tr3: ReceivedOne -> my tp1 {
triggers {
<receivedData: dataOut guard {
"true"
}>
}
}
Transition tr4: ReceivedTheOther -> my tp1 {
triggers {
<receivedData: dataOut guard {
"false"
}>
}
}
EntryPoint tp0
ExitPoint tp1
State WaitingForReceived
State ReceivedOne
State ReceivedTheOther
}
}
State ReceivedBoth
}
}
}
ActorClass SenderManual {
Interface {
}
Structure {
}
Behavior {
}
}
ActorClass ReceiverManual {
Interface {
}
Structure {
}
Behavior {
}
}
ActorClass Sender {
Interface {
conjugated Port dataOut: CommunicationProtocol
}
Structure {
external Port dataOut
}
Behavior {
StateMachine {
Transition init: initial -> SendingData { }
Transition tr0: SendingData -> Done {
triggers {
<receivedData: dataOut>
}
}
State SendingData {
entry {
"dataOut.sendData(1234);"
}
}
State Done
}
}
}
ProtocolClass CommunicationProtocol {
incoming {
Message sendData(data: int32)
Message sendData2(data: DataClass1)
}
outgoing {
Message receivedData()
}
}
DataClass DataClass1 {
usercode1 {"// usercode1"}
usercode2 {"// usercode2"}
usercode3 {"// usercode3"}
Attribute Attr1: int32
Attribute ComplexAttr: DataClass2
Attribute Attr3: float32
Operation MultiplyWithAttr1(value: int32): int32 {
"return self->Attr1*value;"
}
Operation MultiplyWithAttr3(value: float32): float32 {
"return self->Attr3*value;"
}
}
DataClass DataClass2 {
Attribute Attr1: int32
Attribute Attr2: float32
Attribute Attr3: int32
Operation Operation1() {"/*nothing to do*/"}
}
}
|