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)
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)
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)