|
@@ -42,13 +42,14 @@ class Terminal(object):
|
42
|
42
|
|
43
|
43
|
subscribed_events = [Event]
|
44
|
44
|
|
45
|
|
- def __init__(self):
|
|
45
|
+ def __init__(self, asynchronous: bool=True):
|
46
|
46
|
self._input_queue = None
|
47
|
47
|
self._output_queue = None
|
48
|
48
|
self._stop_required = False
|
49
|
49
|
self.subjects = {}
|
50
|
50
|
self.cycle_events = []
|
51
|
51
|
self.event_handlers = collections.defaultdict(list)
|
|
52
|
+ self.asynchronous = asynchronous
|
52
|
53
|
|
53
|
54
|
def accept_event(self, event: Event) -> bool:
|
54
|
55
|
for event_class in self.subscribed_events:
|
|
@@ -85,6 +86,8 @@ class Terminal(object):
|
85
|
86
|
|
86
|
87
|
def receive(self, package: TerminalPackage):
|
87
|
88
|
self.update_with_package(package)
|
|
89
|
+
|
|
90
|
+ self.send(TerminalPackage(is_cycle=True))
|
88
|
91
|
|
89
|
92
|
def send(self, package: TerminalPackage):
|
90
|
93
|
self._output_queue.put(package)
|
|
@@ -153,11 +156,23 @@ class TerminalManager(object):
|
153
|
156
|
|
154
|
157
|
def receive(self) -> [TerminalPackage]:
|
155
|
158
|
packages = []
|
156
|
|
- for input_queue in self.inputs_queues.values():
|
157
|
|
- try:
|
158
|
|
- while True:
|
159
|
|
- packages.append(input_queue.get(block=False, timeout=None))
|
160
|
|
- except Empty:
|
161
|
|
- pass
|
|
159
|
+ for terminal, input_queue in self.inputs_queues.items():
|
|
160
|
+
|
|
161
|
+ if not terminal.asynchronous:
|
|
162
|
+ continue_ = True
|
|
163
|
+ while continue_:
|
|
164
|
+ package = input_queue.get()
|
|
165
|
+
|
|
166
|
+
|
|
167
|
+ continue_ = not package.is_cycle
|
|
168
|
+ packages.append(package)
|
|
169
|
+ else:
|
|
170
|
+ try:
|
|
171
|
+ while True:
|
|
172
|
+ packages.append(
|
|
173
|
+ input_queue.get(block=False, timeout=None),
|
|
174
|
+ )
|
|
175
|
+ except Empty:
|
|
176
|
+ pass
|
162
|
177
|
|
163
|
178
|
return packages
|