USE_DB = 0
import ConfigParser
-import sys, os, string, re, pwd, signal
+import sys, os, string, re, pwd, signal, math
import logging, logging.handlers
from traceback import format_tb
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
+from Idler import TrainIdler,GrayIdler,StringIdler,ClockIdler,FortuneIdler,FileIdler,PipeIdler
import socket
from posix import geteuid
Nick Bannon
Cameron Patrick
and a collective of hungry alpacas.
+
+
+
+For a good time call +61 8 6488 3901
+
+
+
"""
GREETING = 'UCC SNACKS'
idlers = []
idler = None
+
def setup_idlers(v):
global idlers, idler
idlers = [
- StringIdler(v),
+ GrayIdler(v),
+ StringIdler(v, text="Kill 'em all", repeat=False),
+ GrayIdler(v,one="*",zero="-"),
StringIdler(v, text=CREDITS),
- GrayIdler(v),
+ 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) + " "),
+ 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),
+ 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():
global idler
+ if idler.finished():
+ choose_idler()
idler.next()
def run_forever(rfh, wfh, options, cf):
time_to_idle = None
last_timeout_refresh = None
+
+ # This main loop is hideous and the work of the devil - mtearle
+ #
+ #
+ # notes for later surgery
+ # (event, counter, ' ')
+ # V
+ # d[ ] = (method)
+ #
+ # return state
+
while True:
if USE_DB:
try:
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
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))
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')
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))