# Bryan Schumaker (11/13/2010) import socket import libsaria from libsaria import threads server = None def play_id(arg): id = int(arg[0]) print "Trying to play id: %s" % id libsaria.sources.library.play_id(id) def play(*args): libsaria.audio.play() def pause(*args): libsaria.audio.pause() def stop(*args): libsaria.audio.stop() def next(*args): print libsaria.sources libsaria.sources.plist_next() procs = {"play_id":play_id, "play":play, "pause":pause, "stop":stop, "next":next} def decode_len(msg): size, msg = msg.split(' ', 1) return int(size), msg def decode_op(msg): op_len, msg = msg.split(' ', 1) op = msg[:int(op_len)] return op, msg[int(op_len) + 1:] def decode_args(msg): if msg == "0": return [] n_args, msg = msg.split(' ', 1) n_args = n_args args = [] for i in xrange(int(n_args)): arg_len, msg = msg.split(' ', 1) args.append(msg[:int(arg_len)]) msg = msg[int(arg_len) + 1:] return args def decode(text): try: print "Decoding: %s" % text size, msg = decode_len(text) if size != len(msg): print "Message is wrong length!" return except: print "There was a problem receiving the message" return try: op, msg = decode_op(msg) except: print "There was a problem decoding the operation" return try: args = decode_args(msg) except: print "There was a problem decoding the argumets" return try: procs[op](args) except: print "There was a problem running the operation" return def serve(): while 1: try: (client, address) = server.accept() message = client.recv(4096) decode(message) except: break def start_server(): global server # Set up a socket server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) try: ip = socket.gethostbyname(socket.gethostname()) print "Remote server binding to: %s" % ip server.bind((ip, 4242)) except: print "Could not open port 4242" server.listen(5) serve() def start(): threads.background(start_server) def stop(): server.shutdown(socket.SHUT_RDWR) def check_version(): if libsaria.__major__ != 1: return False if libsaria.__minor__ >= 2: return True return False