added pizza
[zanchey/dispense2.git] / sql-edition / servers / VendServer.py
index d15165d..d6f48c9 100755 (executable)
@@ -11,11 +11,12 @@ if USE_DB: import pg
 from time import time, sleep
 from popen2 import popen2
 from LATClient import LATClient, LATClientException
 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 VendingMachine import VendingMachine, VendingException
 from MessageKeeper import MessageKeeper
 from HorizScroll import HorizScroll
 from random import random, seed
-from Idler import TrainIdler,GrayIdler,StringIdler,ClockIdler
+from Idler import TrainIdler,GrayIdler,StringIdler,ClockIdler,FortuneIdler,FileIdler
 import socket
 from posix import geteuid
 
 import socket
 from posix import geteuid
 
@@ -189,26 +190,46 @@ idler = None
 def setup_idlers(v):
        global idlers, idler
        idlers = [
 def setup_idlers(v):
        global idlers, idler
        idlers = [
-               ClockIdler(v),
+                GrayIdler(v),
                StringIdler(v, text="Kill 'em all", repeat=False),
                StringIdler(v, text="Kill 'em all", repeat=False),
+                GrayIdler(v,one="*",zero="-"),
                StringIdler(v, text=CREDITS),
                StringIdler(v, text=CREDITS),
+                GrayIdler(v,one="/",zero="\\"),
+               ClockIdler(v),
+               FileIdler(v, '/etc/passwd'),
+                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) + "            "),
                StringIdler(v, text=str(math.pi) + "            "),
+               ClockIdler(v),
+                GrayIdler(v,one="/",zero="\\",reorder=1),
                StringIdler(v, text=str(math.e) + "            "),
                StringIdler(v, text=str(math.e) + "            "),
+                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),
+               FortuneIdler(v),
+               ClockIdler(v),
                StringIdler(v),
                StringIdler(v),
-               GrayIdler(v),
                TrainIdler(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 = 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():
        idler.reset()
 
 def idle_step():
@@ -259,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
                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
 
                if time_to_idle == None and cur_user == '':
                        time_to_idle = time() + 5
@@ -388,22 +410,33 @@ def run_forever(rfh, wfh, options, cf):
                                                continue
                                        elif cur_selection[1] == '8':
                                                v.display('GOT COKE?')
                                                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:
                                        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
                                        cur_selection = ''
                                        time_to_autologout = time() + 8
+                                       last_timeout_refresh = None
 
 def connect_to_vend(options, cf):
 
 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()
        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))
        else:
                #(rfh, wfh) = popen2('../../virtualvend/vvend.py')
                logging.info('Connecting to virtual vending machine on %s:%d'%(options.host,options.port))
@@ -420,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 = 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')
        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')
@@ -540,7 +575,7 @@ def do_vend_server(options, config_opts):
        while True:
                try:
                        rfh, wfh = connect_to_vend(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))
                        (exc_type, exc_value, exc_traceback) = sys.exc_info()
                        del exc_traceback
                        logging.error("Connection error: "+str(exc_type)+" "+str(e))

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