From 5d01f06545652012ce6ac011ee4cd61a4ccfe67c Mon Sep 17 00:00:00 2001 From: Mark Tearle Date: Sun, 27 Jun 2004 11:13:06 +0000 Subject: [PATCH] start of minimal functionality --- virtualvend/vvend.py | 91 +++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 90 insertions(+), 1 deletion(-) diff --git a/virtualvend/vvend.py b/virtualvend/vvend.py index ac9de42..4f64af0 100644 --- a/virtualvend/vvend.py +++ b/virtualvend/vvend.py @@ -2,6 +2,7 @@ import sys import socket +import string try: import pygtk @@ -59,6 +60,9 @@ class appgui: display = self.wTree.get_widget("label1") display.set_text("*5N4CK0RZ*") + # vending machine password set here + self.vendpw = "AAAAAAAAAAAAAAAA" + self.messageid = None #s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) @@ -112,10 +116,12 @@ class appgui: def server(self): # inicializa o servidor + port = 5150 self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) - self.sock.bind(('localhost', 5051)) + self.sock.bind(('localhost', port)) self.sock.listen(0) + print "listening on ", port # # @@ -137,6 +143,7 @@ class appgui: # insere o cliente na lista e registra o método self.write como # callback para quando existirem dados esperando para serem lidos + self.do_prompt() self.clients[addr] = (conn, gtk.input_add(conn, gtk.gdk.INPUT_READ, self.write)) def write(self, source, condition): @@ -163,6 +170,7 @@ class appgui: for (addr, port), (conn, tag) in self.clients.iteritems(): if source is conn: self.insert('%s:%s >>> %s\n'%(addr, port, data.strip())) + self.handle_command(data.strip()) break return gtk.TRUE @@ -184,6 +192,87 @@ class appgui: gtk.mainquit() sys.stdout.write("quit!\n") + def do_prompt(self): + self.do_send("# ") + + def do_help(self): + help = """ + +Valid commands are: + ABOUT ROM information + B[S][nn] beep [synchronously] for a duration nn (optional) + C[S][nn] silence [synchronously] for a duration nn (optional) + Dxxxxxxxxxx show a message on the display + ECHO {ON|OFF} turn echo on or off + GETROM download the ROM source code using xmodem + H[...] this help screen +*JUMPxxxx jumps to a subroutine at location xxxx +*PEEKxxxx returns the value of the byte at location xxxx +*POKExxxxyy sets the value of location xxxx to yy + PING pongs + S[...] query all internal switch states ++Vnn vend an item ++VALL vend all items +*Wxxxxxxxxxxxx set a new password for authenticated vends. xxx=16 chars + password will be converted to uppercase + +Very few functions are available when the machine is in standalone +mode (DIP SW 1 is set) ++ denotes that this item requires authentication if DIP SW 2 is set +* denotes that DIP SW 3 must be set to use these +Commands starting with # are ignored (comments) +""" + self.do_send(help) + + def do_about(self): + about = """ + +The Virtual Vending Machine Company + +Mark Tearle, June 2004 +""" + self.do_send(about) + + def do_vend_all(self): + for i in range(11,99): + self.do_send("101 Vending ",i) + self.do_send("153 Home sensors failing") + self.do_send("102 Vend all motors complete") + + def do_vend(self,command): + self.do_send("153 Home sensors failing") + + def do_display(self,string): + display = self.wTree.get_widget("label1") + display.set_text("%10.10s" % (string)) + + def do_beep(self,command): + sys.stdout.write("\a") + + def do_silence(self,command): + pass + + + def handle_command(self, command): + command = string.upper(command) + print command + if string.find(command, "HELP",0) == 0: + self.do_help() + elif string.find(command, "ABOUT",0) == 0: + self.do_about() + elif string.find(command, "VALL",0) == 0: + self.do_vend_all() + elif string.find(command, "V",0) == 0: + self.do_vend(command) + elif string.find(command, "B",0) == 0: + self.do_beep(command) + elif string.find(command, "S",0) == 0: + self.do_silence(command) + elif string.find(command, "D",0) == 0: + self.do_display(command[1:-1]) + self.do_prompt() + + # we start the app like this... app=appgui() gtk.mainloop() -- 2.20.1