예제 #1
0
 def __init__(self, server):
     self.return_pending = False
     self.return_event = threading.Event()
     self.lphandler = LongPollHandler(JSON_MIMETYPE)
     self.server = server
     server.register_handler('^.*/freevo/ipc$', self.__ipc_handler)
     server.register_handler('^.*/freevo/ipc.js$', self.__js_handler)
예제 #2
0
 def __init__(self, server):
     self.return_pending = False
     self.return_event = threading.Event()
     self.lphandler = LongPollHandler(JSON_MIMETYPE)
     self.server = server
     server.register_handler('^.*/freevo/ipc$', self.__ipc_handler)
     server.register_handler('^.*/freevo/ipc.js$', self.__js_handler)
예제 #3
0
class WebIPC(object):
    def __init__(self, server):
        self.return_pending = False
        self.return_event = threading.Event()
        self.lphandler = LongPollHandler(JSON_MIMETYPE)
        self.server = server
        server.register_handler('^.*/freevo/ipc$', self.__ipc_handler)
        server.register_handler('^.*/freevo/ipc.js$', self.__js_handler)


    def __ipc_handler(self, request):
        if request.command == 'POST':
            self.__send_handler(request)
        if request.command == 'GET':
            self.lphandler(request)
        else:
            request.send_error(405)


    def __js_handler(self, request):
        request.send_response(200)
        request.send_header('content-type', JS_MIMETYPE)
        request.end_headers()
        f = open(os.path.join(HTML_DIR, 'ipc.js'))
        request.wfile.write(f.read())
        f.close()


    def __send_handler(self, request):
        l = int(request.headers.getheader('Content-Length'))
        s = request.rfile.read(l)
        try:
            result = None
            args = json.loads(s)
            if args['cmd'] == 'return':
                if self.return_pending:
                    self.return_pending = False
                    self.return_result = args.get('data')
                    self.return_event.set()
                else:
                    logger.debug('Unexpected return!')
            elif args['cmd'] == 'event':
                event.Event('WEB_IPC', args['data']).post()
            else:
                logger.debug('Unexpected ')

            if result is None:
                result = {}

            request.send_response(200)
            request.send_header('content-type', JSON_MIMETYPE)
            request.end_headers()
            json.dump(result, request.wfile)
        except:
            request.send_error(500)


    def __calljs(self, js):
        self.return_pending = True
        self.lphandler.append(json.dumps({'cmd':js}))
        self.return_event.wait(10.0)
        self.return_event.clear()
        return self.return_result


    def __getattr__(self, item):
        return JSObject(self.__calljs, None, item)
예제 #4
0
class WebIPC(object):
    def __init__(self, server):
        self.return_pending = False
        self.return_event = threading.Event()
        self.lphandler = LongPollHandler(JSON_MIMETYPE)
        self.server = server
        server.register_handler('^.*/freevo/ipc$', self.__ipc_handler)
        server.register_handler('^.*/freevo/ipc.js$', self.__js_handler)

    def __ipc_handler(self, request):
        if request.command == 'POST':
            self.__send_handler(request)
        if request.command == 'GET':
            self.lphandler(request)
        else:
            request.send_error(405)

    def __js_handler(self, request):
        request.send_response(200)
        request.send_header('content-type', JS_MIMETYPE)
        request.end_headers()
        f = open(os.path.join(HTML_DIR, 'ipc.js'))
        request.wfile.write(f.read())
        f.close()

    def __send_handler(self, request):
        l = int(request.headers.getheader('Content-Length'))
        s = request.rfile.read(l)
        try:
            result = None
            args = json.loads(s)
            if args['cmd'] == 'return':
                if self.return_pending:
                    self.return_pending = False
                    self.return_result = args.get('data')
                    self.return_event.set()
                else:
                    logger.debug('Unexpected return!')
            elif args['cmd'] == 'event':
                event.Event('WEB_IPC', args['data']).post()
            else:
                logger.debug('Unexpected ')

            if result is None:
                result = {}

            request.send_response(200)
            request.send_header('content-type', JSON_MIMETYPE)
            request.end_headers()
            json.dump(result, request.wfile)
        except:
            request.send_error(500)

    def __calljs(self, js):
        self.return_pending = True
        self.lphandler.append(json.dumps({'cmd': js}))
        self.return_event.wait(10.0)
        self.return_event.clear()
        return self.return_result

    def __getattr__(self, item):
        return JSObject(self.__calljs, None, item)