X-Git-Url: https://git.ucc.asn.au/?p=uccvend-vendserver.git;a=blobdiff_plain;f=VendServer%2FVendServer.py;h=ef74c0d9ca3c9389a267119558aec83b27d850d0;hp=2a9a55af613028cd85d9b3a0e32aa0fc9a056b6f;hb=40879050954ca0b244b9388caaade17ed0713d81;hpb=6c130dc942392ccc8b7ffa0ec2ede5f9327f99e6 diff --git a/VendServer/VendServer.py b/VendServer/VendServer.py index 2a9a55a..ef74c0d 100755 --- a/VendServer/VendServer.py +++ b/VendServer/VendServer.py @@ -31,7 +31,11 @@ Nick Bannon Cameron Patrick and a collective of hungry alpacas. +The MIFARE card reader bought to you by: +David Adam +Bug Hunting and hardware maintenance by: +Mitchell Pomery For a good time call +61 8 6488 3901 @@ -252,28 +256,34 @@ idler = None def setup_idlers(v): global idlers, idler idlers = [ - GrayIdler(v), + # + GrayIdler(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), + # + ClockIdler(v), + ClockIdler(v), + ClockIdler(v), + # + StringIdler(v), # Hello Cruel World 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',affinity=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 [now closed? - MSH] - and order as Quinn - I am getting really hungry", repeat=False), - PipeIdler(v, "/usr/bin/getent", "passwd"), - FortuneIdler(v), - ClockIdler(v), - StringIdler(v), - TrainIdler(v), + StringIdler(v, text=" I want some pizza - please call Broadway Pizza on +61 8 9389 8500 - and order as Quinn - I am getting really hungry", repeat=False), # "Hello World" in brainfuck StringIdler(v, text=">+++++++++[<++++++++>-]<.>+++++++[<++++>-]<+.+++++++..+++.[-]>++++++++[<++++>-] <.>+++++++++++[<++++++++>-]<-.--------.+++.------.--------.[-]>++++++++[<++++>- ]<+.[-]++++++++++."), + # + TrainIdler(v), + # + FileIdler(v, '/usr/share/common-licenses/GPL-2',affinity=2), + # + PipeIdler(v, "/usr/bin/getent", "passwd"), + FortuneIdler(v,affinity=20), ] disabled = [ ] @@ -288,23 +298,33 @@ def reset_idler(v, vstatus, t = None): def choose_idler(): global idlers, idler - iiindex = 0 - average_affinity = 10 # guessing here... - if idler and idler.__class__ != GreetingIdler: - iiindex = idlers.index(idler) - - iilen = len(idlers) - - move = int(random()*len(idlers)*average_affinity) + 1 + # Implementation of the King Of the Hill algorithm from; + # http://eli.thegreenplace.net/2010/01/22/weighted-random-generation-in-python/ + + #def weighted_choice_king(weights): + # total = 0 + # winner = 0 + # for i, w in enumerate(weights): + # total += w + # if random.random() * total < w: + # winner = i + # return winner + # + + total = 0 + winner = None + + for choice in idlers: + weight = choice.affinity() + total += weight + if random() * total < weight: + winner = choice - while move >= 0: - iiindex += 1 - iiindex %= iilen - idler = idlers[iiindex] - move -= idler.affinity() + idler = winner - idler.reset() + if idler: + idler.reset() def idle_step(vstatus): global idler @@ -910,24 +930,24 @@ def create_state_table(vstatus): vstatus.state_table[(STATE_DOOR_CLOSING,MIFARE,1)] = do_nothing vstatus.state_table[(STATE_GETTING_UID,TICK,1)] = handle_getting_uid_idle - vstatus.state_table[(STATE_GETTING_UID,DOOR,1)] = do_nothing + vstatus.state_table[(STATE_GETTING_UID,DOOR,1)] = handle_door_event vstatus.state_table[(STATE_GETTING_UID,KEY,1)] = handle_getting_uid_key vstatus.state_table[(STATE_GETTING_UID,MIFARE,1)] = handle_mifare_event vstatus.state_table[(STATE_GETTING_PIN,TICK,1)] = handle_getting_pin_idle - vstatus.state_table[(STATE_GETTING_PIN,DOOR,1)] = do_nothing + vstatus.state_table[(STATE_GETTING_PIN,DOOR,1)] = handle_door_event vstatus.state_table[(STATE_GETTING_PIN,KEY,1)] = handle_getting_pin_key vstatus.state_table[(STATE_GETTING_PIN,MIFARE,1)] = handle_mifare_event vstatus.state_table[(STATE_GET_SELECTION,TICK,1)] = handle_get_selection_idle - vstatus.state_table[(STATE_GET_SELECTION,DOOR,1)] = do_nothing + vstatus.state_table[(STATE_GET_SELECTION,DOOR,1)] = handle_door_event vstatus.state_table[(STATE_GET_SELECTION,KEY,1)] = handle_get_selection_key vstatus.state_table[(STATE_GET_SELECTION,MIFARE,1)] = handle_mifare_add_user_event vstatus.state_table[(STATE_GRANDFATHER_CLOCK,TICK,1)] = handle_idle_grandfather_tick vstatus.state_table[(STATE_GRANDFATHER_CLOCK,TICK,2)] = handle_grandfather_tick - vstatus.state_table[(STATE_GRANDFATHER_CLOCK,DOOR,1)] = do_nothing - vstatus.state_table[(STATE_GRANDFATHER_CLOCK,DOOR,2)] = do_nothing + vstatus.state_table[(STATE_GRANDFATHER_CLOCK,DOOR,1)] = handle_door_event + vstatus.state_table[(STATE_GRANDFATHER_CLOCK,DOOR,2)] = handle_door_event vstatus.state_table[(STATE_GRANDFATHER_CLOCK,KEY,1)] = do_nothing vstatus.state_table[(STATE_GRANDFATHER_CLOCK,KEY,2)] = do_nothing vstatus.state_table[(STATE_GRANDFATHER_CLOCK,MIFARE,1)] = handle_mifare_event