tidy up exception handling code
[uccvend-vendserver.git] / sql-edition / servers / VendServer.py
index ff17122..ad972ca 100755 (executable)
@@ -7,11 +7,13 @@ import sys, os, string, re, pwd
 if USE_DB: import pg
 from time import time, sleep
 from popen2 import popen2
 if USE_DB: import pg
 from time import time, sleep
 from popen2 import popen2
-from LATClient import LATClient
-from VendingMachine import VendingMachine
+from LATClient import LATClient, LATClientException
+from VendingMachine import VendingMachine, VendingException
 from HorizScroll import HorizScroll
 from random import random, seed
 from Idler import TrainIdler,GrayIdler
 from HorizScroll import HorizScroll
 from random import random, seed
 from Idler import TrainIdler,GrayIdler
+import socket
+from traceback import print_tb
 
 GREETING = 'UCC SNACKS'
 PIN_LENGTH = 4
 
 GREETING = 'UCC SNACKS'
 PIN_LENGTH = 4
@@ -109,7 +111,7 @@ def verify_user_pin(uid, pin):
        else:
                return None
 
        else:
                return None
 
-def door_open_mode(vending_machine):
+def door_open_mode(v):
        print "Entering open door mode"
        v.display("-FEED  ME-")
        while True:
        print "Entering open door mode"
        v.display("-FEED  ME-")
        while True:
@@ -362,10 +364,10 @@ def run_forever(rfh, wfh):
                                        time_to_autologout = time() + 8
 
 # FIXME: a less ugly way of passing all these options would be nice
                                        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):
+def connect_to_vend(options, DBServer, DBName, DBUser, DBPassword, ServiceName, ServicePassword, ServerName, ConnectPassword, PrivPassword):
        # Open vending machine via LAT
        if options.use_lat:
        # Open vending machine via LAT
        if options.use_lat:
-               latclient = LATClient(service = ServiceName, password = ServicePassword)
+               latclient = LATClient(service = ServiceName, password = ServicePassword, server_name = ServerName, connect_password = ConnectPassword, priv_password = PrivPassword)
                rfh, wfh = latclient.get_fh()
        else:
                #(rfh, wfh) = popen2('../../virtualvend/vvend.py')
                rfh, wfh = latclient.get_fh()
        else:
                #(rfh, wfh) = popen2('../../virtualvend/vvend.py')
@@ -401,8 +403,21 @@ if __name__ == '__main__':
        ServiceName = cp.get('VendingMachine', 'ServiceName')
        ServicePassword = cp.get('VendingMachine', 'Password')
 
        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')
+
        while True:
        while True:
-               rfh, wfh = connect_to_vend(options, DBServer, DBName, DBUser, DBPassword, ServiceName, ServicePassword)
+               try:
+                       rfh, wfh = connect_to_vend(options, DBServer, DBName, DBUser, DBPassword, ServiceName, ServicePassword, ServerName, ConnectPassword, PrivPassword)
+               except (LATClientException, socket.error):
+                       (exc_type, exc_value, exc_traceback) = sys.exc_info()
+                       print "Connection error ("+str(exc_type)+"):"
+                       print_tb(exc_traceback)
+                       del exc_traceback
+                       print "Trying again in 5 seconds."
+                       sleep(5)
+                       continue
                try:
                        run_forever(rfh, wfh)
                except VendingException:
                try:
                        run_forever(rfh, wfh)
                except VendingException:

UCC git Repository :: git.ucc.asn.au