123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- include "primitives.alh"
- include "modelling.alh"
- include "object_operations.alh"
- include "conformance_scd.alh"
- include "io.alh"
- include "metamodels.alh"
- include "mini_modify.alh"
- Boolean function main(model : Element):
- String input_value
- Float start_time
- String current_state
- String old_state
- Element transitions
- String transition
- start_time = time() - cast_float(read_attribute(model, set_pop(allInstances(model, "FullRuntime/Time")), "current_time"))
- Element all_states
- String element_name
- all_states = allInstances(model, "FullRuntime/State")
- while (set_len(all_states) > 0):
- element_name = set_pop(all_states)
- log("Check " + cast_value(read_attribute(model, element_name, "name")))
- log(" Current: " + cast_value(read_attribute(model, element_name, "current")))
- if (value_eq(read_attribute(model, element_name, "current"), True)):
- log("Found current: " + cast_value(read_attribute(model, element_name, "current")))
- current_state = element_name
- old_state = element_name
- break!
- while (True):
- if (has_input()):
- input_value = input()
- if (input_value == "__EXIT__"):
- break!
- log(cast_value(time() - start_time) + " input " + input_value)
- output(cast_value(time() - start_time) + " input " + input_value)
- transitions = allOutgoingAssociationInstances(model, current_state, "FullRuntime/Transition")
- while (set_len(transitions) > 0):
- transition = set_pop(transitions)
- if (cast_string(read_attribute(model, transition, "trigger")) == input_value):
- if (element_neq(read_attribute(model, transition, "raise"), read_root())):
- log(cast_value(time() - start_time) + " output " + cast_string(read_attribute(model, transition, "raise")))
- output(cast_value(time() - start_time) + " output " + cast_string(read_attribute(model, transition, "raise")))
- current_state = readAssociationDestination(model, transition)
- break!
- log(cast_value(time() - start_time) + " state " + cast_string(read_attribute(model, current_state, "name")))
- output(cast_value(time() - start_time) + " state " + cast_string(read_attribute(model, current_state, "name")))
- sleep(0.2)
- log("CLOSE")
- output("CLOSE")
-
- instantiate_attribute(model, current_state, "current", True)
- instantiate_attribute(model, old_state, "current", True)
- instantiate_attribute(model, set_pop(allInstances(model, "FullRuntime/Time")), "current_time", time() - start_time)
- return True!
|