|
@@ -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]
|