X-Git-Url: https://git.ucc.asn.au/?p=zanchey%2Fdispense2.git;a=blobdiff_plain;f=sql-edition%2Fservers%2FVendingMachine.py;h=9506daf0599b8c2d0b44697c32e2c6466ea98f87;hp=edc593c7844e40738d5fc547aba43bef2eb0765f;hb=482573e7c8afad56f1c8ca0464a6cf9ac3e267f4;hpb=b89bdb9ca959326160ab5214ce8fcc308241baa4 diff --git a/sql-edition/servers/VendingMachine.py b/sql-edition/servers/VendingMachine.py index edc593c..9506daf 100644 --- a/sql-edition/servers/VendingMachine.py +++ b/sql-edition/servers/VendingMachine.py @@ -2,6 +2,7 @@ import re from CRC import do_crc from select import select +import socket asynchronous_responses = [ '400', '401', # door open/closed '610', # switches changed @@ -12,6 +13,8 @@ DOOR = 1 SWITCH = 2 KEY = 3 +class VendingException(Exception): pass + class VendingMachine: def __init__(self, rfh, wfh): self.events = [] @@ -27,7 +30,7 @@ class VendingMachine: self.wfh.write('PING\n') code = '' while code != '000': - (code, _) = self.get_response() + code = self.get_response()[0] self.get_switches() def await_prompt(self): @@ -36,8 +39,12 @@ class VendingMachine: prefix = '' s = '' while True: - s = self.rfh.read(1) - if s == '': raise Exception('nothing read!') + try: + s = self.rfh.read(1) + except socket.error: + print "Blah, seems DEC server has fallen over" + raise VendingException('failed to read input from vending machine') + if s == '': raise VendingException('nothing read!') if s == '\n' or s == '\r': state = 1 prefix = '' @@ -56,7 +63,8 @@ class VendingMachine: s = '' while s == '': s = self.rfh.readline() - if s == '': return None + if s == '': + raise VendingException('Input socket has closed!') s = s.strip('\r\n') code = s[0:3] text = s[4:]