Browse Source

Everything seems to work

Yentl Van Tendeloo 8 years ago
parent
commit
d303aa0601

+ 1 - 1
kernel/modelverse_kernel/main.py

@@ -58,7 +58,7 @@ class ModelverseKernel(object):
         if self.phase_v == "finish":
         if self.phase_v == "finish":
             gen = self.helper_init(user_root)
             gen = self.helper_init(user_root)
         elif self.inst is None:
         elif self.inst is None:
-            raise Exception("Instruction pointer could not be found!")
+            raise Exception("Instruction pointer could not be found for user %s!" % username)
         elif isinstance(self.phase_v, string_types):
         elif isinstance(self.phase_v, string_types):
             if self.phase_v == "init" and self.inst in self.compiled:
             if self.phase_v == "init" and self.inst in self.compiled:
                 #print("%-30s(%s)" % ("COMPILED " + str(self.compiled[self.inst]), self.phase_v))
                 #print("%-30s(%s)" % ("COMPILED " + str(self.compiled[self.inst]), self.phase_v))

+ 14 - 8
kernel/mvk_server/classes/mvkcontroller.xml

@@ -78,7 +78,6 @@
                         <script>                                
                         <script>                                
                             # No JSON encoding necessary, as it is not complex
                             # No JSON encoding necessary, as it is not complex
                             try:
                             try:
-                                print 'from_mvi %s' % data
                                 args = None
                                 args = None
                                 if data["op"] == "set_input":
                                 if data["op"] == "set_input":
                                     if "value" in data:
                                     if "value" in data:
@@ -167,18 +166,25 @@
                     <transition event="raw_exec_reply" target="../process_users">
                     <transition event="raw_exec_reply" target="../process_users">
                         <parameter name="data"/>
                         <parameter name="data"/>
                         <script>
                         <script>
-                            self.users = [v[0] for v in data if v[0] not in self.user_statecharts]
+                            data = set([v[0] for v in data])
+                            self.add_users = [v for v in data if v not in self.user_statecharts]
+                            self.delete_users = [v for v in self.user_statecharts if v not in data]
                         </script>
                         </script>
                     </transition>
                     </transition>
                 </state>
                 </state>
 
 
                 <state id="process_users">
                 <state id="process_users">
-                    <transition cond="not self.users" target="../wait"/>
-                    <transition cond="self.users" target="../creating_user">
+                    <transition cond="not self.add_users and not self.delete_users" target="../wait"/>
+                    <transition cond="self.add_users and not self.delete_users" target="../creating_user">
                         <raise event="create_instance" scope="cd">
                         <raise event="create_instance" scope="cd">
                             <parameter expr="'users'"/>
                             <parameter expr="'users'"/>
                             <parameter expr="'UserStatechart'"/>
                             <parameter expr="'UserStatechart'"/>
-                            <parameter expr="self.users[0]"/>
+                            <parameter expr="self.add_users[0]"/>
+                        </raise>
+                    </transition>
+                    <transition cond="self.delete_users" target=".">
+                        <raise event="delete_instance" scope="cd">
+                            <parameter expr="self.user_statecharts.pop(self.delete_users.pop(0))"/>
                         </raise>
                         </raise>
                     </transition>
                     </transition>
                 </state>
                 </state>
@@ -193,10 +199,10 @@
                             <parameter expr="instancename"/>
                             <parameter expr="instancename"/>
                         </raise>
                         </raise>
                         <script>
                         <script>
-                            self.user_statecharts[self.users[0]] = instancename
+                            self.user_statecharts[self.add_users[0]] = instancename
                             # Repush all this user's messages in the input queue
                             # Repush all this user's messages in the input queue
-                            self.input_queue.extend(self.user_queue.pop(self.users[0], []))
-                            self.users.pop(0)
+                            self.input_queue.extend(self.user_queue.pop(self.add_users[0], []))
+                            self.add_users.pop(0)
                         </script>
                         </script>
                     </transition>
                     </transition>
                 </state>
                 </state>

+ 23 - 8
kernel/mvk_server/server.py

@@ -1,7 +1,7 @@
 """
 """
 Generated by Statechart compiler by Glenn De Jonghe, Joeri Exelmans, Simon Van Mierlo, and Yentl Van Tendeloo (for the inspiration)
 Generated by Statechart compiler by Glenn De Jonghe, Joeri Exelmans, Simon Van Mierlo, and Yentl Van Tendeloo (for the inspiration)
 
 
-Date:   Thu Feb  9 12:46:19 2017
+Date:   Thu Feb  9 13:03:43 2017
 
 
 Model author: Yentl Van Tendeloo
 Model author: Yentl Van Tendeloo
 Model name:   MvK Server
 Model name:   MvK Server
@@ -215,6 +215,11 @@ class MvKController(RuntimeClassBase):
         _running_find_users_process_users_1.setTrigger(None)
         _running_find_users_process_users_1.setTrigger(None)
         _running_find_users_process_users_1.setGuard(self._running_find_users_process_users_1_guard)
         _running_find_users_process_users_1.setGuard(self._running_find_users_process_users_1_guard)
         self.states["/running/find_users/process_users"].addTransition(_running_find_users_process_users_1)
         self.states["/running/find_users/process_users"].addTransition(_running_find_users_process_users_1)
+        _running_find_users_process_users_2 = Transition(self, self.states["/running/find_users/process_users"], [self.states["/running/find_users/process_users"]])
+        _running_find_users_process_users_2.setAction(self._running_find_users_process_users_2_exec)
+        _running_find_users_process_users_2.setTrigger(None)
+        _running_find_users_process_users_2.setGuard(self._running_find_users_process_users_2_guard)
+        self.states["/running/find_users/process_users"].addTransition(_running_find_users_process_users_2)
         
         
         # transition /running/find_users/creating_user
         # transition /running/find_users/creating_user
         _running_find_users_creating_user_0 = Transition(self, self.states["/running/find_users/creating_user"], [self.states["/running/find_users/retrieve_users"]])
         _running_find_users_creating_user_0 = Transition(self, self.states["/running/find_users/creating_user"], [self.states["/running/find_users/retrieve_users"]])
@@ -320,25 +325,33 @@ class MvKController(RuntimeClassBase):
     
     
     def _running_find_users_got_usernames_0_exec(self, parameters):
     def _running_find_users_got_usernames_0_exec(self, parameters):
         data = parameters[0]
         data = parameters[0]
-        self.users = [v[0] for v in data if v[0] not in self.user_statecharts]
+        data = set([v[0] for v in data])
+        self.add_users = [v for v in data if v not in self.user_statecharts]
+        self.delete_users = [v for v in self.user_statecharts if v not in data]
     
     
     def _running_find_users_process_users_0_guard(self, parameters):
     def _running_find_users_process_users_0_guard(self, parameters):
-        return not self.users
+        return not self.add_users and not self.delete_users
     
     
     def _running_find_users_process_users_1_exec(self, parameters):
     def _running_find_users_process_users_1_exec(self, parameters):
-        self.big_step.outputEventOM(Event("create_instance", None, [self, 'users', 'UserStatechart', self.users[0]]))
+        self.big_step.outputEventOM(Event("create_instance", None, [self, 'users', 'UserStatechart', self.add_users[0]]))
     
     
     def _running_find_users_process_users_1_guard(self, parameters):
     def _running_find_users_process_users_1_guard(self, parameters):
-        return self.users
+        return self.add_users and not self.delete_users
+    
+    def _running_find_users_process_users_2_exec(self, parameters):
+        self.big_step.outputEventOM(Event("delete_instance", None, [self, self.user_statecharts.pop(self.delete_users.pop(0))]))
+    
+    def _running_find_users_process_users_2_guard(self, parameters):
+        return self.delete_users
     
     
     def _running_find_users_creating_user_0_exec(self, parameters):
     def _running_find_users_creating_user_0_exec(self, parameters):
         instancename = parameters[0]
         instancename = parameters[0]
         self.big_step.outputEventOM(Event("start_instance", None, [self, instancename]))
         self.big_step.outputEventOM(Event("start_instance", None, [self, instancename]))
         self.big_step.outputEventOM(Event("narrow_cast", None, [self, instancename, Event("set_returnpath", None, [instancename])]))
         self.big_step.outputEventOM(Event("narrow_cast", None, [self, instancename, Event("set_returnpath", None, [instancename])]))
-        self.user_statecharts[self.users[0]] = instancename
+        self.user_statecharts[self.add_users[0]] = instancename
         # Repush all this user's messages in the input queue
         # Repush all this user's messages in the input queue
-        self.input_queue.extend(self.user_queue.pop(self.users[0], []))
-        self.users.pop(0)
+        self.input_queue.extend(self.user_queue.pop(self.add_users[0], []))
+        self.add_users.pop(0)
     
     
     def initializeStatechart(self):
     def initializeStatechart(self):
         # enter default state
         # enter default state
@@ -1458,6 +1471,8 @@ class Executor(RuntimeClassBase):
         self.returnpath, username, operation, params, self.request_id = self.request_queue.pop(0)
         self.returnpath, username, operation, params, self.request_id = self.request_queue.pop(0)
         reply = None
         reply = None
         commands = []
         commands = []
+        if operation == "set_input":
+            print("Add input " + str(params))
         while 1:
         while 1:
             commands = self.mvk.execute_yields(username, operation, params, reply)
             commands = self.mvk.execute_yields(username, operation, params, reply)
             if commands is None:
             if commands is None: