gmyth-stream/server/plugins/comm/xmlrpc.py
author renatofilho
Tue Apr 03 16:42:04 2007 +0100 (2007-04-03)
branchtrunk
changeset 484 27e83a8f68d7
child 492 63d9475228ac
permissions -rw-r--r--
[svn r489] moved server implementation to new dir
renatofilho@484
     1
import lib
renatofilho@484
     2
import SimpleXMLRPCServer
renatofilho@484
     3
renatofilho@484
     4
renatofilho@484
     5
class Handler:
renatofilho@484
     6
renatofilho@484
     7
    def __init__(self, recv_pool, send_pool):
renatofilho@484
     8
        self.recv_pool = recv_pool
renatofilho@484
     9
        self.send_pool = send_pool
renatofilho@484
    10
        self.getMsg = self.sendMsg
renatofilho@484
    11
renatofilho@484
    12
    def _listMethods(self):
renatofilho@484
    13
        return ['setup', 'play', 'stop', 'close', 'getMsg']
renatofilho@484
    14
renatofilho@484
    15
    def _methodHelp(self, method):
renatofilho@484
    16
renatofilho@484
    17
        if method == 'setup':
renatofilho@484
    18
            return "Setup the Media: setup( filename, mux, vcodec, vbitrate, fps, acodec, abitrate, width, height, port"
renatofilho@484
    19
        elif method == 'play':
renatofilho@484
    20
            return "Play the Media: play()"
renatofilho@484
    21
        elif method == 'stop':
renatofilho@484
    22
            return "Stop the Media: stop()"
renatofilho@484
    23
        elif method == 'close':
renatofilho@484
    24
            return "Close the connection: close()"
renatofilho@484
    25
        elif method == 'getMsg':
renatofilho@484
    26
            return "Return the first message in the pool: getMsg()"
renatofilho@484
    27
        else:
renatofilho@484
    28
            # By convention, return empty
renatofilho@484
    29
            # string if no help is available
renatofilho@484
    30
            return ""
renatofilho@484
    31
renatofilho@484
    32
    def setup(self, filename, mux, vcodec, vbitrate,\
renatofilho@484
    33
            fps, acodec, abitrate, width, height, port):
renatofilho@484
    34
        self.recv_pool.append("SETUP")
renatofilho@484
    35
        self.recv_pool.append("%s %s %s %s %s %s %s" % (filename, mux, vcodec, vbitrate,\
renatofilho@484
    36
                                                        fps, acodec, abitrate, width, height, port)
renatofilho@484
    37
        return self.sendMsg()
renatofilho@484
    38
renatofilho@484
    39
    def play(self):
renatofilho@484
    40
        self.recv_pool.append("PLAY")
renatofilho@484
    41
        return self.sendMsg()
renatofilho@484
    42
renatofilho@484
    43
    def stop(self):
renatofilho@484
    44
        self.recv_pool.append("STOP")
renatofilho@484
    45
        return self.sendMsg()
renatofilho@484
    46
renatofilho@484
    47
    def close(self):
renatofilho@484
    48
        self.recv_pool.append("CLOSE")
renatofilho@484
    49
        return self.sendMsg()
renatofilho@484
    50
renatofilho@484
    51
    def sendMsg(self):
renatofilho@484
    52
        if self.send_pool != []:
renatofilho@484
    53
            return self.send_pool.pop(0)
renatofilho@484
    54
        else:
renatofilho@484
    55
            return ""
renatofilho@484
    56
renatofilho@484
    57
renatofilho@484
    58
class Server:
renatofilho@484
    59
renatofilho@484
    60
    def __init__(self, config):
renatofilho@484
    61
        self.host = 'localhost'
renatofilho@484
    62
        self.port = int(config.get("Comm", "port"))
renatofilho@484
    63
        self.finish = 0
renatofilho@484
    64
        self.recv_pool = []
renatofilho@484
    65
        self.send_pool = []
renatofilho@484
    66
renatofilho@484
    67
        self.handler = Handler(self.recv_pool, self.send_pool)
renatofilho@484
    68
renatofilho@484
    69
        self.xmlrpc = SimpleXMLRPCServer.SimpleXMLRPCServer((self.host, self.port))
renatofilho@484
    70
        self.xmlrpc.register_instance(self.handler)
renatofilho@484
    71
renatofilho@484
    72
renatofilho@484
    73
    def getMsg(self, size):
renatofilho@484
    74
        if self.recv_pool != []:
renatofilho@484
    75
            return self.recv_pool.pop(0)
renatofilho@484
    76
        else:
renatofilho@484
    77
            return ""
renatofilho@484
    78
renatofilho@484
    79
    def sendMsg(self, msg):
renatofilho@484
    80
        self.send_pool.append(msg)
renatofilho@484
    81
renatofilho@484
    82
    def Ack(self, command):
renatofilho@484
    83
        msg = "[%s] Command %s received" % (lib.now(), command)
renatofilho@484
    84
        self.sendMsg(msg + "\n")
renatofilho@484
    85
renatofilho@484
    86
    def getRequest(self):
renatofilho@484
    87
        self.xmlrpc.handle_request()
renatofilho@484
    88
        return (0, "RPC Client")
renatofilho@484
    89
renatofilho@484
    90
    def disconnect_client(self, connection):
renatofilho@484
    91
        connection = 0
renatofilho@484
    92
renatofilho@484
    93
    def stop(self):
renatofilho@484
    94
        self.xmlrpc.server_close()