ocarina/plugins/remote.py

109 lines
2.0 KiB
Python

# 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.collection.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.collection
libsaria.collection.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:
server.bind((socket.gethostname(), 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