X-Git-Url: https://git.ucc.asn.au/?p=uccvend-vendserver.git;a=blobdiff_plain;f=sql-edition%2Fservers%2FVendingMachine.py;h=18f3067d6b80c8d1823218f1b56205b69795b5f6;hp=2574c6d36a23ffc9c82adb62200df5d30ebbae3c;hb=5deb2f51e435bc0e10a0e8c55ff61d63e56681e0;hpb=ae5bb2bd19b75664847d40e5bdaaf16ddad06745 diff --git a/sql-edition/servers/VendingMachine.py b/sql-edition/servers/VendingMachine.py index 2574c6d..18f3067 100644 --- a/sql-edition/servers/VendingMachine.py +++ b/sql-edition/servers/VendingMachine.py @@ -36,7 +36,7 @@ class VendingMachine: s = '' while True: s = self.rfh.read(1) - if s == '': raise Exception + if s == '': raise Exception('nothing read!') if s == '\n' or s == '\r': state = 1 prefix = '' @@ -49,7 +49,7 @@ class VendingMachine: self.challenge = int(prefix, 16) return - def get_response(self): + def get_response(self, async = False): self.wfh.flush() while True: s = '' @@ -61,6 +61,7 @@ class VendingMachine: text = s[4:] if code in asynchronous_responses: self.handle_event(code, text) + if async: return None else: self.await_prompt() return (code, text) @@ -147,10 +148,11 @@ class VendingMachine: return None def wait_for_events(self, timeout = None): + if self.events: return True (r, _, _) = select([self.rfh], [], [], timeout) if not r: return False event_added = False while True: - r.get_response() + self.get_response(async = True) (r, _, _) = select([self.rfh], [], [], 0) if not r: return event_added