'''Listen to SCOP streams for commands and render some turtles.''' from Tkinter import * from Arena import Arena from WalkingTurtle import WalkingTurtle from Vector import * import scop import os scopserver = os.getenv("SCOPCTRLSERVER", "www.srcf.ucam.org") sock1 = scop.scop_open(scopserver, "viewp1") sock2 = scop.scop_open(scopserver, "viewp2") scop.scop_listen(sock1, "p1ctrl") scop.scop_listen(sock2, "p2ctrl") tk = Tk() arena = Arena(tk, sock1, sock2) arena.pack() arena.add(WalkingTurtle(Vector(200, 300), 0, 1, fill='turquoise')) arena.add(WalkingTurtle(Vector(600, 300), 0, 1, fill='purple')) tk.mainloop()
#!/usr/bin/python # client.py - DMI - 8-11-03 # Usage: client [ <query> ] (default query is "Hello world!") import scop, sys if len(sys.argv) > 1: query = sys.argv[1] else: query = "Hello world!" sock = scop.scop_open("localhost", "client") reply = scop.scop_rpc(sock, "server", query) print "Query <" + query + ">, Reply <" + reply + ">" scop.scop_close(sock)
#!/usr/bin/python # status.py - DMI - 8-11-03 import scop sock = scop.scop_open("localhost", "status") v = scop.scop_list(sock) print len(v), "clients connected." for tuple in v: name, interest, src_hint = tuple print "Client connection <" + name + "> listening to <" + interest + \ ">, source hint <" + src_hint + ">" scop.scop_close(sock)
#!/usr/bin/python # xml_sender.py - DMI - 11-11-03 import scop def marshall(dict): l = [] keys = dict.keys() for k in keys: l.append([k, dict[k]]) return l ab = {"Poirot": "Belgium", "Morse": "Oxford, UK", "Danger Mouse": "London, UK"} v = marshall(ab) sock = scop.scop_open("localhost", "xml_sender") scop.scop_send_struct(sock, "xml_receiver", v) scop.scop_close(sock)
#!/usr/bin/python # receiver.py - DMI - 29-10-03 import scop, sys sock = scop.scop_open("localhost", "receiver") if sock == None: print "Error on open" sys.exit() while 1: msg, rpc_flag = scop.scop_get_message(sock) print "Received <" + msg + ">" if msg == "quit": break scop.scop_close(sock)
#!/usr/bin/python # event_source.py - DMI - 7-11-03 # Usage: event_source [ <source> ] (default source is "news") import scop, sys, time count = 1 sock = scop.scop_open("localhost", "event_source") if sock == None: print "Error on open" sys.exit() if len(sys.argv) > 1: source = sys.argv[1] else: source = "news" scop.scop_set_source_hint(sock, source) while 1: msg = "Item " + str(count) scop.scop_emit(sock, msg) count = count + 1 time.sleep(1)
'''GUI for listening to status messages''' from feedbackGUI import * from Tkinter import * import scop sock1 = scop.scop_open("www.srcf.ucam.org", "feedbackp1") sock2 = scop.scop_open("www.srcf.ucam.org", "feedbackp2") scop.scop_listen(sock1, "p1status") scop.scop_listen(sock2, "p2status") tk = Tk() defaultwidth = 600 defaultheight = 800 gui = feedbackGUI(tk, sock1, sock2, defaultwidth, defaultheight) gui.pack mainloop()
sys.exit() # p1ctrl or p2ctrl endpoint = "p" + str(playerno) + "ctrl" print("Using endpoint " + endpoint) for i in range(1, len(sys.argv)): if sys.argv[i] == "norobot": robotmode = False elif sys.argv[i] == "localscop": scophost = "localhost" else: print "Usage: relay [norobot] [localscop]" sys.exit() sock = scop.scop_open(scophost, host) if sock == None: print "Cannot connect to scopserver" sys.exit() scop.scop_listen(sock, endpoint) speed = 0 turn = 0 if robotmode == True: r = Roomba() r.sci.Wake() r.Control() time.sleep(0.25) while 1:
#!/usr/bin/python # multi_listener.cpp - DMI - 7-11-03 # Usage: multi_listener [ <source-one> <source-two> ] # (default sources are "news" and "updates") import scop, sys, select sock = [] for i in range(2): sock.append(scop.scop_open("localhost", "multi_listener")) if len(sys.argv) == 3: scop.scop_listen(sock[0], argv[1]) scop.scop_listen(sock[1], argv[2]) else: scop.scop_listen(sock[0], "news") scop.scop_listen(sock[1], "updates") while 1: read_fds = [sock[0], sock[1]] r, w, e = select.select(read_fds, [], []) for fd in r: msg, rpc_flag = scop.scop_get_message(fd) print "Received <" + msg + "> from ", if fd == sock[1]: print "updates" else: print "news"
from Tkinter import * from ControlGUI import Controls import scop, os def usage(): print("Usage: python control.py [2]") sys.exit() scopserver = os.getenv("SCOPCTRLSERVER", "www.srcf.ucam.org") player = 1 argv = sys.argv[1:] for arg in argv: if arg == '2': player = 2 else: usage() sock = scop.scop_open(scopserver, "controlp" + str(player)) scop.scop_set_source_hint(sock, "p" + str(player) + "ctrl") tk = Tk() controls = Controls(tk, sock, player) controls.pack() tk.mainloop()
#!/usr/bin/python # server.py - DMI - 8-11-03 import scop sock = scop.scop_open("localhost", "server") while 1: query, rpc_flag = scop.scop_get_message(sock) length = len(query) reply = "" for i in range(length): reply = reply + query[i] + query[i] scop.scop_send_reply(sock, reply) scop.scop_close(sock)
#!/usr/bin/python # event_listener.py - DMI - 7-11-03 import scop, sys sock = scop.scop_open("localhost", "event_listener") scop.scop_listen(sock, "news") while 1: msg, rpc_flag = scop.scop_get_message(sock) print "Received <" + msg + ">"
#!/usr/bin/python # method_client.py - DMI - 11-11-03 import scop def cent_to_faren(sock, c): return scop.scop_rpc(sock, "method_server", c, "ctof") def faren_to_cent(sock, f): return scop.scop_rpc(sock, "method_server", f, "ftoc") def count_uses(sock): return scop.scop_rpc(sock, "method_server", None, "stats") sock = scop.scop_open("localhost", "method_client") print str(0.0) + " deg C = " + str(cent_to_faren(sock, 0.0)) + " deg F." print str(20.0) + " deg C = " + str(cent_to_faren(sock, 20.0)) + " deg F." print str(60.0) + " deg F = " + str(faren_to_cent(sock, 60.0)) + " deg C." print "The server has been accessed " + str(count_uses(sock)) + " times." scop.scop_close(sock)
#!/usr/bin/python # sos.py - DMI - 8-11-03 import scop, sys, syslog, os sock = scop.scop_open("localhost", "sos", 1) if sock == None: print "Can't connect to scopserver." sys.exit() if os.fork() > 0: sys.exit() # Detach while 1: buf, rpc_flag = scop.scop_get_message(sock) if buf == None: syslog.syslog(syslog.LOG_INFO, "Lost connection to scopserver.") sys.exit() syslog.syslog(syslog.LOG_INFO, buf) scop.scop_close(sock)