|
@@ -134,6 +134,8 @@ Void function start_class(model : Element, data : Element, class : String, ident
|
|
|
class_handle = create_node()
|
|
|
dict_add(class_handle, "type", class)
|
|
|
dict_add(class_handle, "ID", identifier)
|
|
|
+ dict_add(class_handle, "events", create_node())
|
|
|
+ dict_add(class_handle, "new_events", create_node())
|
|
|
dict_add(class_handle, "timers", create_node())
|
|
|
dict_add(data["classes"], class_handle["ID"], class_handle)
|
|
|
|
|
@@ -207,7 +209,7 @@ Element function get_enabled_transitions(model : Element, state : String, data :
|
|
|
|
|
|
event_names = create_node()
|
|
|
event_parameters = create_node()
|
|
|
- events = set_copy(data["events"])
|
|
|
+ events = set_copy(data["classes"][data["current_class"]]["events"])
|
|
|
while (read_nr_out(events) > 0):
|
|
|
evt = set_pop(events)
|
|
|
evt_name = list_read(evt, 0)
|
|
@@ -300,8 +302,19 @@ Void function process_raised_event(model : Element, event : Element, parameter_a
|
|
|
String identifier
|
|
|
identifier = list_read(parameter_action, 0)
|
|
|
delete_class(model, data, identifier)
|
|
|
+ elif (scope == "broad"):
|
|
|
+ // Send to all classes
|
|
|
+ Element classes
|
|
|
+ classes = dict_keys(data["classes"])
|
|
|
+ while(read_nr_out(classes) > 0):
|
|
|
+ set_add(data["classes"][set_pop(classes)]["new_events"], create_tuple(read_attribute(model, event, "event"), parameter_action))
|
|
|
+ elif (scope == "narrow"):
|
|
|
+ // Send to the specified class only
|
|
|
+ // TODO some error checking would be nice...
|
|
|
+ set_add(data["classes"][read_attribute(model, event, "target")]["new_events"], create_tuple(read_attribute(model, event, "event"), parameter_action))
|
|
|
else:
|
|
|
- set_add(data["events"], create_tuple(read_attribute(model, event, "event"), parameter_action))
|
|
|
+ // Same as local
|
|
|
+ set_add(data["classes"][data["current_class"]]["new_events"], create_tuple(read_attribute(model, event, "event"), parameter_action))
|
|
|
|
|
|
return !
|
|
|
|
|
@@ -709,15 +722,26 @@ Boolean function main(model : Element):
|
|
|
// Stop execution
|
|
|
return True!
|
|
|
|
|
|
- dict_overwrite(data, "events", create_node())
|
|
|
if (element_neq(interrupt, read_root())):
|
|
|
- // Got interrupt
|
|
|
- set_add(data["events"], create_tuple(interrupt, read_root()))
|
|
|
+ // Send out, as otherwise the client doesn't get a dialog
|
|
|
output("Processed event, ready for more!")
|
|
|
|
|
|
// Update the simulated time to the time of interrupt
|
|
|
time_sim = time() - time_0
|
|
|
|
|
|
+ dict_overwrite(data, "new_events", create_node())
|
|
|
+ Element classes
|
|
|
+ classes = dict_keys(data["classes"])
|
|
|
+ while(read_nr_out(classes) > 0):
|
|
|
+ String class
|
|
|
+ class = set_pop(classes)
|
|
|
+ dict_overwrite(data["classes"][class], "events", data["classes"][class]["new_events"])
|
|
|
+ dict_overwrite(data["classes"][class], "new_events", create_node())
|
|
|
+
|
|
|
+ if (element_neq(interrupt, read_root())):
|
|
|
+ // Got interrupt, so append it already
|
|
|
+ set_add(data["classes"][class]["events"], create_tuple(interrupt, read_root()))
|
|
|
+
|
|
|
// Else we timeout, and thus keep the time_sim
|
|
|
dict_overwrite(data, "time_sim", time_sim)
|
|
|
|