X-Git-Url: https://git.ucc.asn.au/?p=zanchey%2Fdispense2.git;a=blobdiff_plain;f=sql-edition%2Fservers%2FVendServer.py;h=b7176bef395158318a567c687338374125304323;hp=3f2c72fd93bd7b22810ab8bf05669f5e2fac8e6a;hb=1d49e3da21a39aaf981f59d0092daa181527c20d;hpb=60d1451f02297e3b2c72bf06ab46f5b55f70f356 diff --git a/sql-edition/servers/VendServer.py b/sql-edition/servers/VendServer.py index 3f2c72f..b7176be 100755 --- a/sql-edition/servers/VendServer.py +++ b/sql-edition/servers/VendServer.py @@ -11,11 +11,12 @@ if USE_DB: import pg from time import time, sleep from popen2 import popen2 from LATClient import LATClient, LATClientException +from SerialClient import SerialClient, SerialClientException from VendingMachine import VendingMachine, VendingException from MessageKeeper import MessageKeeper from HorizScroll import HorizScroll from random import random, seed -from Idler import TrainIdler,GrayIdler,StringIdler,ClockIdler,FortuneIdler +from Idler import TrainIdler,GrayIdler,StringIdler,ClockIdler,FortuneIdler,FileIdler,PipeIdler import socket from posix import geteuid @@ -189,27 +190,46 @@ idler = None def setup_idlers(v): global idlers, idler idlers = [ + GrayIdler(v), StringIdler(v, text="Kill 'em all", repeat=False), + GrayIdler(v,one="*",zero="-"), StringIdler(v, text=CREDITS), + GrayIdler(v,one="/",zero="\\"), + ClockIdler(v), + GrayIdler(v,one="X",zero="O"), + FileIdler(v, '/usr/share/common-licenses/GPL-2'), + GrayIdler(v,one="*",zero="-",reorder=1), StringIdler(v, text=str(math.pi) + " "), + ClockIdler(v), + GrayIdler(v,one="/",zero="\\",reorder=1), StringIdler(v, text=str(math.e) + " "), - StringIdler(v), + GrayIdler(v,one="X",zero="O",reorder=1), + StringIdler(v, text=" I want some pizza - please call Pizza Hut Shenton Park on +61 8 9381 9979 - and order as Quinn - I am getting really hungry", repeat=False), + PipeIdler(v, "/usr/bin/ypcat", "passwd"), FortuneIdler(v), ClockIdler(v), - GrayIdler(v), + StringIdler(v), TrainIdler(v), - GrayIdler(v,one="*",zero="-"), - GrayIdler(v,one="/",zero="\\"), - GrayIdler(v,one="X",zero="O"), - GrayIdler(v,one="*",zero="-",reorder=1), - GrayIdler(v,one="/",zero="\\",reorder=1), - GrayIdler(v,one="X",zero="O",reorder=1), + ] + disabled = [ ] idler = choose_idler() def choose_idler(): global idler - idler = idlers[int(random()*len(idlers))] + iiindex = 0 + + if idler: + iiindex = idlers.index(idler) + + iilen = len(idlers) + + move = int(random()*len(idlers)) + 1 + + while move >= 0: + idler = idlers[( (iiindex + 1) % iilen)] + move = move - idler.affinity() + idler.reset() def idle_step(): @@ -260,6 +280,7 @@ def run_forever(rfh, wfh, options, cf): if len(cur_pin) == PIN_LENGTH and mk.done() and time_to_autologout == None: # start autologout time_to_autologout = time() + 15 + last_timeout_refresh = None if time_to_idle == None and cur_user == '': time_to_idle = time() + 5 @@ -389,22 +410,33 @@ def run_forever(rfh, wfh, options, cf): continue elif cur_selection[1] == '8': v.display('GOT COKE?') - os.system('su - "%s" -c "dispense %s"'%(username, cur_selection[0])) + if ((os.system('su - "%s" -c "dispense %s"'%(username, cur_selection[0])) >> 8) != 0): + v.display('SEEMS NOT') + else: + v.display('GOT COKE!') else: - v.display('HERES A '+cur_selection) - v.vend(cur_selection) - sleep(0.5) - v.display('THANK YOU') - sleep(0.5) + v.display(cur_selection+' - $1.00') + if ((os.system('su - "%s" -c "dispense snack"'%(username)) >> 8) == 0): + v.vend(cur_selection) + v.display('THANK YOU') + else: + v.display('NO MONEY?') + sleep(1) cur_selection = '' time_to_autologout = time() + 8 + last_timeout_refresh = None def connect_to_vend(options, cf): - # Open vending machine via LAT? + if options.use_lat: logging.info('Connecting to vending machine using LAT') 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() + elif options.use_serial: + # Open vending machine via serial. + logging.info('Connecting to vending machine using serial') + serialclient = SerialClient(port = '/dev/ttyS1', baud = 9600) + rfh,wfh = serialclient.get_fh() else: #(rfh, wfh) = popen2('../../virtualvend/vvend.py') logging.info('Connecting to virtual vending machine on %s:%d'%(options.host,options.port)) @@ -421,7 +453,9 @@ def parse_args(): op = OptionParser(usage="%prog [OPTION]...") op.add_option('-f', '--config-file', default='/etc/dispense/servers.conf', metavar='FILE', dest='config_file', help='use the specified config file instead of /etc/dispense/servers.conf') - op.add_option('--virtualvend', action='store_false', default=True, dest='use_lat', help='use the virtual vending server instead of LAT') + op.add_option('--serial', action='store_true', default=True, dest='use_serial', help='use the serial port') + op.add_option('--lat', action='store_true', default=False, dest='use_lat', help='use LAT') + op.add_option('--virtualvend', action='store_false', default=True, dest='use_serial', help='use the virtual vending server instead of LAT') op.add_option('-n', '--hostname', dest='host', default='localhost', help='the hostname to connect to for virtual vending machine mode (default: localhost)') op.add_option('-p', '--port', dest='port', default=5150, type='int', help='the port number to connect to (default: 5150)') op.add_option('-l', '--log-file', metavar='FILE', dest='log_file', default='', help='log output to the specified file') @@ -541,7 +575,7 @@ def do_vend_server(options, config_opts): while True: try: rfh, wfh = connect_to_vend(options, config_opts) - except (LATClientException, socket.error), e: + except (SerialClientException, socket.error), e: (exc_type, exc_value, exc_traceback) = sys.exc_info() del exc_traceback logging.error("Connection error: "+str(exc_type)+" "+str(e))