X-Git-Url: https://git.ucc.asn.au/?p=zanchey%2Fdispense2.git;a=blobdiff_plain;f=sql-edition%2Fservers%2FVendServer.py;h=861f7c95c1542ba315f742ecf8e9d1a00a5d23cc;hp=c48d2bc0987f8117c357c654354b5842b0b57fb1;hb=4743f13254a4cbdfd266b36f8bb451c292e6278a;hpb=49b70d20b2aad8be178f1002460947cc81228277;ds=inline diff --git a/sql-edition/servers/VendServer.py b/sql-edition/servers/VendServer.py index c48d2bc..861f7c9 100755 --- a/sql-edition/servers/VendServer.py +++ b/sql-edition/servers/VendServer.py @@ -1,14 +1,17 @@ #!/usr/bin/python # vim:ts=4 +USE_DB = 0 + import sys, os, string, re, pwd -import pg +if USE_DB: import pg from time import time, sleep from popen2 import popen2 from LATClient import LATClient from VendingMachine import VendingMachine from ConfigParser import ConfigParser from HorizScroll import HorizScroll +from random import random, seed GREETING = 'UCC SNACKS' PIN_LENGTH = 4 @@ -54,8 +57,13 @@ def scroll_options(username, mk, welcome = False): else: msg = [] choices = ' '*10+'CHOICES: ' - coke_machine = file('/home/other/coke/coke_contents') - cokes = coke_machine.readlines() + try: + coke_machine = file('/home/other/coke/coke_contents') + cokes = coke_machine.readlines() + coke_machine.close() + except: + cokes = [] + pass for c in cokes: c = c.strip() (slot_num, price, slot_name) = c.split(' ', 2) @@ -63,7 +71,8 @@ def scroll_options(username, mk, welcome = False): choices += '%s8-%s (%sc) '%(slot_num, slot_name, price) choices += '55-DOOR ' choices += 'OR A SNACK. ' - choices += '99 TO READ AGAIN.' + choices += '99 TO READ AGAIN. ' + choices += 'CHOICE? ' msg.append((choices, False, None)) mk.set_messages(msg) @@ -102,17 +111,100 @@ def verify_user_pin(uid, pin): def door_open_mode(vending_machine): print "Entering open door mode" - v.display("DOOR OPEN") + v.display("-FEED ME-") while True: e = v.next_event() if e == None: break (event, params) = e if event == DOOR: if params == 1: # door closed - v.display("BYE BYE!") + v.display("-YUM YUM!-") sleep(1) return +class Idler: + def __init__(self, v): + self.idle_state = 0 + self.v = v + + def put_shark(self, s, l): + if self.s[l] == ' ': + self.s[l] = s + elif self.s[l] == 'X': + self.s[l] = '*' + else: + self.s[l] = 'X' + + def next(self): + # does the next stage of a dance + self.s = [' ']*10 + shark1 = self.idle_state % 18 + if shark1 < 9: + self.put_shark('^', shark1) + else: + self.put_shark('^', 18-shark1) + + shark2 = ((self.idle_state+4) % 36)/2 + if shark2 < 9: + self.put_shark('<', shark2) + else: + self.put_shark('<', 18-shark2) + + shark3 = ((self.idle_state+7) % 54)/3 + if shark3 < 9: + self.put_shark('>', 9-shark3) + else: + self.put_shark('>', 9-(18-shark3)) + + train1 = ((self.idle_state%(18*36))) + train1_start = 122 + if train1 > train1_start and train1 < train1_start+(10*2): + for i in range(5): + ptr = i+train1-train1_start-5 + if ptr >= 0 and ptr < 10: self.s[ptr] = '#' + + train2 = ((self.idle_state%(18*36))) + train2_start = 400 + if train2 > train2_start and train2 < train2_start+(10*2): + for i in range(5): + ptr = i+train2-train2_start-5 + if ptr >= 0 and ptr < 10: self.s[9-ptr] = '#' + + train3 = ((self.idle_state%(18*36))) + train3_start = 230 + if train3 > train3_start and train3 < train3_start+(10*2): + for i in range(10): + ptr = i+train3-train3_start-10 + if ptr >= 0 and ptr < 10: self.s[ptr] = '-' + + self.v.display(string.join(self.s, '')) + self.idle_state += 1 + self.idle_state %= 18*36*54 + +def cookie(v): + seed(time()) + messages = [' WASSUP! ', 'PINK FISH ', ' SECRETS '] + choice = int(random()*len(messages)) + msg = messages[choice] + left = range(len(msg)) + for i in range(len(msg)): + if msg[i] == ' ': left.remove(i) + reveal = 1 + while left: + s = '' + for i in range(0, len(msg)): + if i in left: + if reveal == 0: + left.remove(i) + s += msg[i] + else: + s += chr(int(random()*26)+ord('A')) + reveal += 1 + reveal %= 53 + else: + s += msg[i] + v.display(s) + def center(str): LEN = 10 return ' '*((LEN-len(str))/2)+str @@ -140,7 +232,7 @@ class MessageKeeper: if len(self.scrolling_message[0][0]) > 10: (m, r, t) = self.scrolling_message[0] a = [] - exp = HorizScroll(m).expand(padding = 10) + exp = HorizScroll(m).expand(padding = 0, wraparound = True) if t == None: t = 0.1 else: @@ -186,36 +278,44 @@ if __name__ == '__main__': v = VendingMachine(rfh, wfh) print 'PING is', v.ping() - db = DispenseDatabase(v, DBServer, DBName, DBUser, DBPassword) + if USE_DB: db = DispenseDatabase(v, DBServer, DBName, DBUser, DBPassword) cur_user = '' cur_pin = '' cur_selection = '' mk = MessageKeeper(v) mk.set_message(GREETING) - logout_timeout = None + time_to_autologout = None + idler = Idler(v) + time_to_idle = None last_timeout_refresh = None while True: - db.handle_events() + if USE_DB: db.handle_events() - if logout_timeout != None: - time_left = logout_timeout - time() - if time_left < 10 and (last_timeout_refresh > time_left or last_timeout_refresh is None): + if time_to_autologout != None: + time_left = time_to_autologout - time() + if time_left < 5 and (last_timeout_refresh is None or last_timeout_refresh > time_left): mk.set_message('LOGOUT: '+str(int(time_left))) last_timeout_refresh = int(time_left) + cur_selection = '' - if logout_timeout != None and logout_timeout - time() <= 0: - logout_timeout = None + if time_to_autologout != None and time_to_autologout - time() <= 0: + time_to_autologout = None cur_user = '' cur_pin = '' cur_selection = '' mk.set_message(GREETING) - if logout_timeout and not mk.done(): logout_timeout = None - if cur_user and cur_pin and mk.done() and logout_timeout == None: + if time_to_autologout and not mk.done(): time_to_autologout = None + if cur_user == '' and time_to_autologout: time_to_autologout = None + if len(cur_pin) == PIN_LENGTH and mk.done() and time_to_autologout == None: # start autologout - logout_timeout = time() + 10 + time_to_autologout = time() + 15 + + if time_to_idle == None and cur_user == '': time_to_idle = time() + 60 + if time_to_idle != None and cur_user != '': time_to_idle = None + if time_to_idle is not None and time() > time_to_idle: idler.next() mk.update_display() @@ -297,9 +397,11 @@ if __name__ == '__main__': continue cur_selection += chr(key + ord('0')) mk.set_message('SELECT: '+cur_selection) + time_to_autologout = None elif len(cur_selection) == 1: if key == 11: cur_selection = '' + time_to_autologout = None scroll_options(username, mk) continue else: @@ -309,6 +411,8 @@ if __name__ == '__main__': if cur_selection == '55': v.display('GOT DOOR?') os.system('su - "%s" -c "dispense door"'%username) + elif cur_selection == '91': + cookie(v) elif cur_selection == '99': scroll_options(username, mk) cur_selection = '' @@ -323,4 +427,4 @@ if __name__ == '__main__': v.display('THANK YOU') sleep(0.5) cur_selection = '' - logout_timeout = time() + 10 + time_to_autologout = time() + 10