def done(self):
return len(self.scrolling_message) == 0
-def run_forever(rfh, wfh):
+def run_forever(rfh, wfh, options, cf):
v = VendingMachine(rfh, wfh)
print 'PING is', v.ping()
- if USE_DB: db = DispenseDatabase(v, DBServer, DBName, DBUser, DBPassword)
+ if USE_DB: db = DispenseDatabase(v, cf.DBServer, cf.DBName, cf.DBUser, cf.DBPassword)
cur_user = ''
cur_pin = ''
cur_selection = ''
cur_selection = ''
time_to_autologout = time() + 8
-# FIXME: a less ugly way of passing all these options would be nice
-def connect_to_vend(options, DBServer, DBName, DBUser, DBPassword, ServiceName, ServicePassword, ServerName, ConnectPassword, PrivPassword):
- # Open vending machine via LAT
+def connect_to_vend(options, cf):
+ # Open vending machine via LAT?
if options.use_lat:
- latclient = LATClient(service = ServiceName, password = ServicePassword, server_name = ServerName, connect_password = ConnectPassword, priv_password = PrivPassword)
+ latclient = LATClient(service = cf.ServiceName, password = cf.ServicePassword, server_name = cf.ServerName, connect_password = cf.ConnectPassword, priv_password = cf.PrivPassword)
rfh, wfh = latclient.get_fh()
else:
#(rfh, wfh) = popen2('../../virtualvend/vvend.py')
return options
+config_options = {
+ 'DBServer': ('Database', 'Server'),
+ 'DBName': ('Database', 'Name'),
+ 'DBUser': ('VendingMachine', 'DBUser'),
+ 'DBPassword': ('VendingMachine', 'DBPassword'),
+
+ 'ServiceName': ('VendingMachine', 'ServiceName'),
+ 'ServicePassword': ('VendingMachine', 'Password'),
+
+ 'ServerName': ('DecServer', 'Name'),
+ 'ConnectPassword': ('DecServer', 'ConnectPassword'),
+ 'PrivPassword': ('DecServer', 'PrivPassword'),
+ }
+
+class VendConfigFile:
+ def __init__(self, config_file, options):
+ try:
+ cp = ConfigParser.ConfigParser()
+ cp.read(config_file)
+
+ for option in options:
+ section, name = options[option]
+ value = cp.get(section, name)
+ self.__dict__[option] = value
+
+ except ConfigParser.Error, e:
+ print "Error reading config file "+config_file+": " + str(e)
+ sys.exit(1)
+
+
if __name__ == '__main__':
import ConfigParser
options = parse_args()
-
- try:
- cp = ConfigParser.ConfigParser()
- cp.read(options.config_file)
- DBServer = cp.get('Database', 'Server')
- DBName = cp.get('Database', 'Name')
- DBUser = cp.get('VendingMachine', 'DBUser')
- DBPassword = cp.get('VendingMachine', 'DBPassword')
-
- ServiceName = cp.get('VendingMachine', 'ServiceName')
- ServicePassword = cp.get('VendingMachine', 'Password')
-
- ServerName = cp.get('DecServer', 'Name')
- ConnectPassword = cp.get('DecServer', 'ConnectPassword')
- PrivPassword = cp.get('DecServer', 'PrivPassword')
- except ConfigParser.Error, e:
- print "Error reading config file: " + str(e)
- sys.exit(1)
+ config_opts = VendConfigFile(options.config_file, config_options)
while True:
try:
- rfh, wfh = connect_to_vend(options, DBServer, DBName, DBUser, DBPassword, ServiceName, ServicePassword, ServerName, ConnectPassword, PrivPassword)
+ rfh, wfh = connect_to_vend(options, config_opts)
except (LATClientException, socket.error), e:
(exc_type, exc_value, exc_traceback) = sys.exc_info()
print
sleep(5)
continue
try:
- run_forever(rfh, wfh)
+ run_forever(rfh, wfh, options, config_opts)
except VendingException:
print
print "Connection died, trying again..."