/[anoncvs]/projects/dispense2/sql-edition/servers/VendingMachine.py


UCC Code Repository

Diff of /projects/dispense2/sql-edition/servers/VendingMachine.py

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.6 by dagobah, Sun Jun 27 11:11:00 2004 UTC revision 1.12 by cameron, Sun Aug 1 08:21:01 2004 UTC
# Line 1  Line 1 
1  # vim:ts=4  # vim:ts=4
2  import re, pg  import re
3  from CRC import do_crc  from CRC import do_crc
4  from select import select  from select import select
5    import socket, logging
6    
7  asynchronous_responses = [      '400', '401', # door open/closed  asynchronous_responses = [      '400', '401', # door open/closed
8                                  '610',        # switches changed                                  '610',        # switches changed
# Line 12  DOOR = 1 Line 13  DOOR = 1
13  SWITCH = 2  SWITCH = 2
14  KEY = 3  KEY = 3
15    
16    class VendingException(Exception): pass
17    
18  class VendingMachine:  class VendingMachine:
19          def __init__(self, rfh, wfh):          def __init__(self, rfh, wfh):
20                  self.events = []                  self.events = []
# Line 27  class VendingMachine: Line 30  class VendingMachine:
30                  self.wfh.write('PING\n')                  self.wfh.write('PING\n')
31                  code = ''                  code = ''
32                  while code != '000':                  while code != '000':
33                          (code, _) = self.get_response()                          code = self.get_response()[0]
34                  self.get_switches()                  self.get_switches()
35    
36          def await_prompt(self):          def await_prompt(self):
# Line 36  class VendingMachine: Line 39  class VendingMachine:
39                  prefix = ''                  prefix = ''
40                  s = ''                  s = ''
41                  while True:                  while True:
42                          s = self.rfh.read(1)                          try:
43                          if s == '': raise Exception('nothing read!')                                  s = self.rfh.read(1)
44                            except socket.error:
45                                    raise VendingException('failed to read input from vending machine')
46                            if s == '': raise VendingException('nothing read!')
47                          if s == '\n' or s == '\r':                          if s == '\n' or s == '\r':
48                                  state = 1                                  state = 1
49                                  prefix = ''                                  prefix = ''
# Line 56  class VendingMachine: Line 62  class VendingMachine:
62                          s = ''                          s = ''
63                          while s == '':                          while s == '':
64                                  s = self.rfh.readline()                                  s = self.rfh.readline()
65                                  if s == '': return None                                  if s == '':
66                                            raise VendingException('Input socket has closed!')
67                                  s = s.strip('\r\n')                                  s = s.strip('\r\n')
68                          code = s[0:3]                          code = s[0:3]
69                          text = s[4:]                          text = s[4:]
# Line 89  class VendingMachine: Line 96  class VendingMachine:
96                  elif code[0] == '2':                  elif code[0] == '2':
97                          self.events.append((KEY, int(code[1:3])))                          self.events.append((KEY, int(code[1:3])))
98                  else:                  else:
99                          sys.stderr.write('WARNING: Unhandled event! (%s %s)\n'%(code,text))                          logging.warning('Unhandled event! (%s %s)\n'%(code,text))
100    
101          def authed_message(self, message):          def authed_message(self, message):
102                  if self.challenge == None:                  if self.challenge == None:

Legend:
Removed from v.1.6  
changed lines
  Added in v.1.12

Managed by UCC Webmasters ViewVC Help
Powered by ViewVC 1.1.26