فهرست منبع

Built in a more decent timeout

Yentl Van Tendeloo 8 سال پیش
والد
کامیت
a9ca406a62
5فایلهای تغییر یافته به همراه84 افزوده شده و 46 حذف شده
  1. 1 1
      integration/utils.py
  2. 1 1
      scripts/prompt.py
  3. 1 1
      unit/utils.py
  4. 62 32
      wrappers/http_client.py
  5. 19 11
      wrappers/http_client.xml

+ 1 - 1
integration/utils.py

@@ -77,6 +77,6 @@ def flush_data(address, data):
 
 def start_mvc():
     port = getFreePort()
-    address = "http://127.0.0.1:%s" % port
+    address = "127.0.0.1:%s" % port
     proc = execute("run_local_modelverse", [str(port)], wait=False)
     return proc, address

+ 1 - 1
scripts/prompt.py

@@ -31,7 +31,7 @@ local_print("Welcome to the local shell!")
 try:
     address = sys.argv[1]
 except IndexError:
-    address = "http://127.0.0.1:8001"
+    address = "127.0.0.1:8001"
 try:
     taskname = sys.argv[2]
 except IndexError:

+ 1 - 1
unit/utils.py

@@ -77,6 +77,6 @@ def flush_data(address, data):
 
 def start_mvc():
     port = getFreePort()
-    address = "http://127.0.0.1:%s" % port
+    address = "127.0.0.1:%s" % port
     proc = execute("run_local_modelverse", [str(port)], wait=False)
     return proc, address

+ 62 - 32
wrappers/http_client.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)
 
-Date:   Thu Aug 24 10:10:13 2017
+Date:   Thu Aug 24 10:20:41 2017
 
 Model author: Yentl Van Tendeloo
 Model name:   HTTP client
@@ -60,49 +60,60 @@ class HTTPClient(RuntimeClassBase):
         self.states["/connecting"].setEnter(self._connecting_enter)
         self.states["/connecting"].setExit(self._connecting_exit)
         
+        # state /connecting/connecting
+        self.states["/connecting/connecting"] = State(4, "/connecting/connecting", self)
+        self.states["/connecting/connecting"].setEnter(self._connecting_connecting_enter)
+        
+        # state /connecting/cooldown
+        self.states["/connecting/cooldown"] = State(5, "/connecting/cooldown", self)
+        self.states["/connecting/cooldown"].setEnter(self._connecting_cooldown_enter)
+        self.states["/connecting/cooldown"].setExit(self._connecting_cooldown_exit)
+        
         # state /connected
-        self.states["/connected"] = ParallelState(4, "/connected", self)
+        self.states["/connected"] = ParallelState(6, "/connected", self)
         
         # state /connected/listening
-        self.states["/connected/listening"] = State(5, "/connected/listening", self)
+        self.states["/connected/listening"] = State(7, "/connected/listening", self)
         
         # state /connected/listening/listen
-        self.states["/connected/listening/listen"] = State(6, "/connected/listening/listen", self)
+        self.states["/connected/listening/listen"] = State(8, "/connected/listening/listen", self)
         self.states["/connected/listening/listen"].setEnter(self._connected_listening_listen_enter)
         
         # state /connected/listening/close
-        self.states["/connected/listening/close"] = State(7, "/connected/listening/close", self)
+        self.states["/connected/listening/close"] = State(9, "/connected/listening/close", self)
         
         # state /connected/sending
-        self.states["/connected/sending"] = State(8, "/connected/sending", self)
+        self.states["/connected/sending"] = State(10, "/connected/sending", self)
         
         # state /connected/sending/waiting_for_data
-        self.states["/connected/sending/waiting_for_data"] = State(9, "/connected/sending/waiting_for_data", self)
+        self.states["/connected/sending/waiting_for_data"] = State(11, "/connected/sending/waiting_for_data", self)
         
         # state /connected/sending/transferring
-        self.states["/connected/sending/transferring"] = State(10, "/connected/sending/transferring", self)
+        self.states["/connected/sending/transferring"] = State(12, "/connected/sending/transferring", self)
         
         # state /connected/queueing
-        self.states["/connected/queueing"] = State(11, "/connected/queueing", self)
+        self.states["/connected/queueing"] = State(13, "/connected/queueing", self)
         
         # state /connected/queueing/queueing
-        self.states["/connected/queueing/queueing"] = State(12, "/connected/queueing/queueing", self)
+        self.states["/connected/queueing/queueing"] = State(14, "/connected/queueing/queueing", self)
         self.states["/connected/queueing/queueing"].setEnter(self._connected_queueing_queueing_enter)
         
         # state /connected/parsing
-        self.states["/connected/parsing"] = State(13, "/connected/parsing", self)
+        self.states["/connected/parsing"] = State(15, "/connected/parsing", self)
         
         # state /connected/parsing/wait_for_header
-        self.states["/connected/parsing/wait_for_header"] = State(14, "/connected/parsing/wait_for_header", self)
+        self.states["/connected/parsing/wait_for_header"] = State(16, "/connected/parsing/wait_for_header", self)
         
         # state /connected/parsing/wait_for_payload
-        self.states["/connected/parsing/wait_for_payload"] = State(15, "/connected/parsing/wait_for_payload", self)
+        self.states["/connected/parsing/wait_for_payload"] = State(17, "/connected/parsing/wait_for_payload", self)
         
         # add children
         self.states[""].addChild(self.states["/init"])
         self.states[""].addChild(self.states["/waiting"])
         self.states[""].addChild(self.states["/connecting"])
         self.states[""].addChild(self.states["/connected"])
+        self.states["/connecting"].addChild(self.states["/connecting/connecting"])
+        self.states["/connecting"].addChild(self.states["/connecting/cooldown"])
         self.states["/connected"].addChild(self.states["/connected/listening"])
         self.states["/connected"].addChild(self.states["/connected/sending"])
         self.states["/connected"].addChild(self.states["/connected/queueing"])
@@ -116,6 +127,7 @@ class HTTPClient(RuntimeClassBase):
         self.states["/connected/parsing"].addChild(self.states["/connected/parsing/wait_for_payload"])
         self.states[""].fixTree()
         self.states[""].default_state = self.states["/init"]
+        self.states["/connecting"].default_state = self.states["/connecting/connecting"]
         self.states["/connected/listening"].default_state = self.states["/connected/listening/listen"]
         self.states["/connected/sending"].default_state = self.states["/connected/sending/waiting_for_data"]
         self.states["/connected/queueing"].default_state = self.states["/connected/queueing/queueing"]
@@ -134,16 +146,20 @@ class HTTPClient(RuntimeClassBase):
         _waiting_0.setTrigger(Event("connect", "request_in"))
         self.states["/waiting"].addTransition(_waiting_0)
         
-        # transition /connecting
-        _connecting_0 = Transition(self, self.states["/connecting"], [self.states["/connected"]])
-        _connecting_0.setAction(self._connecting_0_exec)
-        _connecting_0.setTrigger(Event("connected_socket", "socket_in"))
-        _connecting_0.setGuard(self._connecting_0_guard)
-        self.states["/connecting"].addTransition(_connecting_0)
-        _connecting_1 = Transition(self, self.states["/connecting"], [self.states["/waiting"]])
-        _connecting_1.setAction(self._connecting_1_exec)
-        _connecting_1.setTrigger(Event("_0after"))
-        self.states["/connecting"].addTransition(_connecting_1)
+        # transition /connecting/connecting
+        _connecting_connecting_0 = Transition(self, self.states["/connecting/connecting"], [self.states["/connecting/cooldown"]])
+        _connecting_connecting_0.setTrigger(Event("error_socket", "socket_in"))
+        self.states["/connecting/connecting"].addTransition(_connecting_connecting_0)
+        _connecting_connecting_1 = Transition(self, self.states["/connecting/connecting"], [self.states["/connected"]])
+        _connecting_connecting_1.setAction(self._connecting_connecting_1_exec)
+        _connecting_connecting_1.setTrigger(Event("connected_socket", "socket_in"))
+        _connecting_connecting_1.setGuard(self._connecting_connecting_1_guard)
+        self.states["/connecting/connecting"].addTransition(_connecting_connecting_1)
+        
+        # transition /connecting/cooldown
+        _connecting_cooldown_0 = Transition(self, self.states["/connecting/cooldown"], [self.states["/connecting/connecting"]])
+        _connecting_cooldown_0.setTrigger(Event("_1after"))
+        self.states["/connecting/cooldown"].addTransition(_connecting_cooldown_0)
         
         # transition /connected/listening/listen
         _connected_listening_listen_0 = Transition(self, self.states["/connected/listening/listen"], [self.states["/connected/listening/listen"]])
@@ -194,6 +210,18 @@ class HTTPClient(RuntimeClassBase):
         _connected_parsing_wait_for_payload_1.setTrigger(None)
         _connected_parsing_wait_for_payload_1.setGuard(self._connected_parsing_wait_for_payload_1_guard)
         self.states["/connected/parsing/wait_for_payload"].addTransition(_connected_parsing_wait_for_payload_1)
+        
+        # transition /connecting
+        _connecting_0 = Transition(self, self.states["/connecting"], [self.states["/waiting"]])
+        _connecting_0.setAction(self._connecting_0_exec)
+        _connecting_0.setTrigger(Event("_0after"))
+        self.states["/connecting"].addTransition(_connecting_0)
+    
+    def _connecting_enter(self):
+        self.addTimer(0, self.timeout)
+    
+    def _connecting_exit(self):
+        self.removeTimer(0)
     
     def _init_enter(self):
         self.ID = str(uuid.uuid4())
@@ -202,12 +230,14 @@ class HTTPClient(RuntimeClassBase):
     def _waiting_enter(self):
         self.big_step.outputEvent(Event("http_client_initialized", "request_out", []))
     
-    def _connecting_enter(self):
-        self.addTimer(0, self.timeout)
+    def _connecting_connecting_enter(self):
         self.big_step.outputEvent(Event("connect_socket", "socket_out", [self.socket, self.address]))
     
-    def _connecting_exit(self):
-        self.removeTimer(0)
+    def _connecting_cooldown_enter(self):
+        self.addTimer(1, 0.1)
+    
+    def _connecting_cooldown_exit(self):
+        self.removeTimer(1)
     
     def _connected_listening_listen_enter(self):
         self.big_step.outputEvent(Event("recv_socket", "socket_out", [self.socket]))
@@ -215,6 +245,9 @@ class HTTPClient(RuntimeClassBase):
     def _connected_queueing_queueing_enter(self):
         pass
     
+    def _connecting_0_exec(self, parameters):
+        self.big_step.outputEvent(Event("http_client_timeout", "request_out", []))
+    
     def _init_0_exec(self, parameters):
         socket = parameters[0]
         ID = parameters[1]
@@ -232,17 +265,14 @@ class HTTPClient(RuntimeClassBase):
         self.timeout = timeout
         print("Connecting")
     
-    def _connecting_0_exec(self, parameters):
+    def _connecting_connecting_1_exec(self, parameters):
         socket = parameters[0]
         self.big_step.outputEvent(Event("http_client_ready", "request_out", []))
     
-    def _connecting_0_guard(self, parameters):
+    def _connecting_connecting_1_guard(self, parameters):
         socket = parameters[0]
         return self.socket == socket
     
-    def _connecting_1_exec(self, parameters):
-        self.big_step.outputEvent(Event("http_client_timeout", "request_out", []))
-    
     def _connected_listening_listen_0_exec(self, parameters):
         socket = parameters[0]
         data = parameters[1]

+ 19 - 11
wrappers/http_client.xml

@@ -62,18 +62,26 @@
                 </transition>
             </state>
 
-            <state id="connecting">
-                <onentry>
-                    <raise scope="output" event="connect_socket" port="socket_out">
-                        <parameter expr="self.socket"/>
-                        <parameter expr="self.address"/>
-                    </raise>
-                </onentry>
+            <state id="connecting" initial="connecting">
+                <state id="connecting">
+                    <onentry>
+                        <raise scope="output" event="connect_socket" port="socket_out">
+                            <parameter expr="self.socket"/>
+                            <parameter expr="self.address"/>
+                        </raise>
+                    </onentry>
 
-                <transition port="socket_in" event="connected_socket" cond="self.socket == socket" target="../connected">
-                    <parameter name="socket"/>
-                    <raise scope="output" port="request_out" event="http_client_ready"/>
-                </transition>
+                    <transition port="socket_in" event="error_socket" target="../cooldown"/>
+
+                    <transition port="socket_in" event="connected_socket" cond="self.socket == socket" target="../../connected">
+                        <parameter name="socket"/>
+                        <raise scope="output" port="request_out" event="http_client_ready"/>
+                    </transition>
+                </state>
+
+                <state id="cooldown">
+                    <transition after="0.1" target="../connecting"/>
+                </state>
 
                 <transition after="self.timeout" target="../waiting">
                     <raise scope="output" port="request_out" event="http_client_timeout"/>