diff -r a806d8ad0ff0 -r 5e1afa4a66e8 gmyth-stream/plugins/comm/xmlrpc.py --- a/gmyth-stream/plugins/comm/xmlrpc.py Tue Mar 27 00:13:27 2007 +0100 +++ b/gmyth-stream/plugins/comm/xmlrpc.py Mon Apr 02 20:05:56 2007 +0100 @@ -1,74 +1,58 @@ - ''' - # GMyth-Stream - # - # @file plugins/comm/xmlrpc.py - # - # @brief

Plugin for GMyth-Stream - # - # Copyright (C) 2007 INdT - Instituto Nokia de Tecnologia. - # @author Artur Duque de Souza - # - # - # This program is free software; you can redistribute it and/or modify - # it under the terms of the GNU Lesser General Public License as published by - # the Free Software Foundation; either version 2 of the License, or - # (at your option) any later version. - # - # This program is distributed in the hope that it will be useful, - # but WITHOUT ANY WARRANTY; without even the implied warranty of - # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - # GNU General Public License for more details. - # - # You should have received a copy of the GNU Lesser General Public License - # along with this program; if not, write to the Free Software - # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - # - ''' - +import lib import SimpleXMLRPCServer class Handler: - def __init__(self, pool): - self.pool = pool + def __init__(self, recv_pool, send_pool): + self.recv_pool = recv_pool + self.send_pool = send_pool + self.getMsg = self.sendMsg def _listMethods(self): - return ['Setup', 'Play', 'Stop', 'Close'] + return ['setup', 'play', 'stop', 'close', 'getMsg'] def _methodHelp(self, method): - if method == 'Setup': - return "Setup the Media: Setup(filename,codec,bitrate,widht,height,port)" - elif method == 'Play': - return "Play the Media: Play()" - elif method == 'Stop': - return "Stop the Media: Stop()" - elif method == 'Close': - return "Close the connection: Close()" + if method == 'setup': + return "Setup the Media: setup( filename, mux, vcodec, vbitrate, fps, acodec, abitrate, width, height, port" + elif method == 'play': + return "Play the Media: play()" + elif method == 'stop': + return "Stop the Media: stop()" + elif method == 'close': + return "Close the connection: close()" + elif method == 'getMsg': + return "Return the first message in the pool: getMsg()" else: # By convention, return empty # string if no help is available return "" + def setup(self, filename, mux, vcodec, vbitrate,\ + fps, acodec, abitrate, width, height, port): + self.recv_pool.append("SETUP") + self.recv_pool.append("%s %s %s %s %s %s %s" % (filename, mux, vcodec, vbitrate,\ + fps, acodec, abitrate, width, height, port) + return self.sendMsg() - def Setup(self, filename, codec, bitrate, width, height, port): - self.pool.append("SETUP") - self.pool.append("%s %s %s %s %s %s" % (filename, codec, bitrate,\ - width, height, port)) - return 0 + def play(self): + self.recv_pool.append("PLAY") + return self.sendMsg() - def Play(self): - self.pool.append("PLAY") - return 0 + def stop(self): + self.recv_pool.append("STOP") + return self.sendMsg() - def Stop(self): - self.pool.append("STOP") - return 0 + def close(self): + self.recv_pool.append("CLOSE") + return self.sendMsg() - def Close(self): - self.pool.append("CLOSE") - return 0 + def sendMsg(self): + if self.send_pool != []: + return self.send_pool.pop(0) + else: + return "" class Server: @@ -77,20 +61,28 @@ self.host = 'localhost' self.port = int(config.get("Comm", "port")) self.finish = 0 - self.pool = [] + self.recv_pool = [] + self.send_pool = [] - self.handler = Handler(self.pool) + self.handler = Handler(self.recv_pool, self.send_pool) self.xmlrpc = SimpleXMLRPCServer.SimpleXMLRPCServer((self.host, self.port)) self.xmlrpc.register_instance(self.handler) def getMsg(self, size): - try: - return self.pool.pop(0) - except IndexError: + if self.recv_pool != []: + return self.recv_pool.pop(0) + else: return "" + def sendMsg(self, msg): + self.send_pool.append(msg) + + def Ack(self, command): + msg = "[%s] Command %s received" % (lib.now(), command) + self.sendMsg(msg + "\n") + def getRequest(self): self.xmlrpc.handle_request() return (0, "RPC Client")