Browse Source

Fixed external services communication

Yentl Van Tendeloo 8 years ago
parent
commit
40efdd1430

+ 10 - 8
bootstrap/services.alc

@@ -23,7 +23,9 @@ String function comm_newPort():
 	Element queues
 	queues = create_node()
 	dict_add(queues, "input", create_node())
+	dict_add(queues, "last_input", queues["input"])
 	dict_add(queues, "output", create_node())
+	dict_add(queues, "last_output", queues["output"])
 
 	// Make it visible
 	dict_add(root, attempt, queues)
@@ -56,24 +58,24 @@ Element function comm_get(comm : String):
 
 	// Return the value that we got
 	Element root
-	root = read_root()
 	Element value
-	value = root["input"]["value"]
-	dict_overwrite(root, "input", root["input"]["next"])
+	root = read_root()
+	value = root[comm]["input"]["value"]
+	dict_overwrite(root[comm], "input", root[comm]["input"]["next"])
 
 	return value!
 
 String function comm_connect(service : String):
 	// Connect to an existing service
-	log("Resolving service location for " + cast_e2s(service))
 	service = get_service_id(service)
-	log("Resolved service ID: " + service)
 	service = read_attribute(core, service, "port")
-	log("Resolved port: " + service)
 
 	String port
 	port = comm_newPort()
-	log("Request new port: " + port)
 	comm_set(service, port)
-	log("Communication OK")
 	return port!
+
+Void function comm_close(comm : String):
+	if (string_startswith(comm, "__")):
+		dict_delete(read_root(), comm)
+	return!

+ 5 - 3
hybrid_server/classes/mvkcontroller.xml

@@ -2,6 +2,7 @@
     <relationships>
         <association name="to_mvi" class="Server" min="1" max="1"/>
         <association name="tasks" class="Task"/>
+        <association name="services" class="Service"/>
     </relationships>
     <constructor>
         <parameter name="params"/>
@@ -277,7 +278,8 @@
                                     first = self.mvs.read_edge(outgoing[0])
                                     dest = first[1]
                                     name = self.mvs.read_value(dest)
-                                    if name.startswith("__"):
+                                    if name == "__hierarchy":
+                                        # Skip the special case, as this is neither data, nor a task
                                         continue
                                     tasks.add(name)
 
@@ -298,8 +300,8 @@
                                     self.task = self.new_tasks.pop()
                                 </script>
                                 <raise event="create_instance" scope="cd">
-                                    <parameter expr="'tasks'"/>
-                                    <parameter expr="'Task'"/>
+                                    <parameter expr="'services' if self.task.startswith('__') else 'tasks'"/>
+                                    <parameter expr="'Service' if self.task.startswith('__') else 'Task'"/>
                                     <parameter expr="self.task"/>
                                     <parameter expr="self.mvs_operations"/>
                                     <parameter expr="self.mvk"/>

+ 1 - 0
hybrid_server/server.xml

@@ -29,4 +29,5 @@
     <class src="classes/server.xml"/>
     <class src="classes/socket.xml"/>
     <class src="classes/task.xml"/>
+    <class src="classes/service.xml"/>
 </diagram>

+ 1 - 0
interface/HUTN/includes/services.alh

@@ -3,3 +3,4 @@ Boolean function comm_hasInput(comm : String)
 Void function comm_set(comm : String, value : Element)
 Element function comm_get(comm : String)
 String function comm_connect(service : String)
+Void function comm_close(comm : String)

+ 0 - 2
wrappers/modelverse.py

@@ -785,8 +785,6 @@ def read_attrs(model_name, ID):
     # raises UnknownIdentifier
     _goto_mode(MODE_MODIFY, model_name)
 
-    print("Read attrs on model named " + str(model_name))
-
     _input(["read", ID])
     output = _handle_output("Success: ", split=" ")
     v = output.split("\n")