class Core(Thread): def __init__(self, args, extra_args): Thread.__init__(self) self._args = args self._extra_args = extra_args self._threads = [] self._event_handler = CoreEventHandler() if CrossPlatform.get().is_linux(): signal.signal(signal.SIGCHLD, self.signal_handler) signal.signal(signal.SIGTERM, self.signal_handler) def is_streaming(self): if hasattr(self, '_stream_server') and self._stream_server is not None: return True return False def stream_server_start(self, *args, **kargs): if self.is_streaming(): return logging.info('StreamServer start: {}'.format(kargs)) self._stream_server = StreamServer(kargs, lambda data: self.handler('server', data)) self._stream_server.start() def stream_server_stop(self): if hasattr(self, '_stream_server') and self._stream_server is not None: self._stream_server.stop() self._stream_server = None def playme(self, remote_ip, remote_port, service): def myip(remote_ip): s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) s.connect((remote_ip, 0)) return s.getsockname()[0] def xbmc(): stream_url = self._stream_server.url.format(ip=myip(remote_ip)) url = 'http://{}:{}/xbmcCmds/xbmcHttp?command=PlayFile({})'.format( remote_ip, remote_port, stream_url) req = urllib2.Request(url) logging.info('url = {}'.format(url)) response = urllib2.urlopen(req, None, 5) result = response.read() logging.info('result: {}'.format(result)) def desktop_mirror(): stream_url = self._stream_server.url.format(ip=myip(remote_ip)) data_as_json = json.dumps({ 'method': 'Player.Open', 'id': 1, 'jsonrpc': '2.0', 'params': {'item': {'file': stream_url}}} ) url = 'http://{}:{}/jsonrpc'.format(remote_ip, remote_port) logging.info('url = {}'.format(url)) logging.info(' json = {}'.format(data_as_json)) req = urllib2.Request(url, data_as_json, {'Content-Type': 'application/json'}) response = urllib2.urlopen(req, None, 5) result = response.read() logging.info('result: {}'.format(result)) result = json.loads(result) #switch back to json with pretty format logging.debug(json.dumps(result, indent=4)) #logging.info('Got streaming url: {}'. # format(self._stream_server.url)) #if service == '_desktop-mirror._tcp': # desktop_mirror() #else: # xbmc() desktop_mirror() @property def targets(self): if not hasattr(self, '_avahi_browse'): return dict() return self._avahi_browse.targets @property def hosts(self): if not hasattr(self, '_avahi_browse'): return dict() return self._avahi_browse.hosts def run(self): self._avahi_browse = AvahiService(lambda data: self.handler('avahi', data)) self._stream_recever = StreamReceiver(lambda data: self.handler('srx', data)) self._threads.append(self._avahi_browse) self._threads.append(self._stream_recever) for thread in self._threads: thread.start() for thread in self._threads: thread.join() def stop(self): for thread in self._threads: logging.debug('Stopping thread - {}'.format(thread.name)) thread.stop() self.stream_server_stop() def launch_selection_area_process(self): SelectionArea(lambda data: self.handler('selection', data)).start() def register_listener(self, ui_window): self._event_handler.register_listener(ui_window) def on_event_relay(self, event_name, data): self._event_handler.on_event_relay(event_name, data) def on_event_stream_ready(self, event_name, data): self._event_handler.on_event_stream_ready(event_name, data) def handler(self, obj_id, data): self._event_handler.handler(obj_id, data) def signal_handler(self, signum, frame): logging.info('signal: ' + str(signum)) if signal.SIGTERM == signum: self.send_form_destroy() try: if CrossPlatform.get().is_linux(): if signal.SIGCHLD == signum: os.waitpid(-1, os.WNOHANG) except OSError: pass
class Core(Thread): def __init__(self, args, extra_args): Thread.__init__(self) self._args = args self._extra_args = extra_args self._threads = [] self._event_handler = CoreEventHandler() if CrossPlatform.get().is_linux(): signal.signal(signal.SIGCHLD, self.signal_handler) signal.signal(signal.SIGTERM, self.signal_handler) def is_streaming(self): if hasattr(self, '_stream_server') and self._stream_server is not None: return True return False def stream_server_start(self, *args, **kargs): if self.is_streaming(): return logging.info('StreamServer start: {}'.format(kargs)) self._stream_server = StreamServer( kargs, lambda data: self.handler('server', data)) self._stream_server.start() def stream_server_stop(self): if hasattr(self, '_stream_server') and self._stream_server is not None: self._stream_server.stop() self._stream_server = None def playme(self, remote_ip, remote_port, service): def myip(remote_ip): s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) s.connect((remote_ip, 0)) return s.getsockname()[0] def xbmc(): stream_url = self._stream_server.url.format(ip=myip(remote_ip)) url = 'http://{}:{}/xbmcCmds/xbmcHttp?command=PlayFile({})'.format( remote_ip, remote_port, stream_url) req = urllib2.Request(url) logging.info('url = {}'.format(url)) response = urllib2.urlopen(req, None, 5) result = response.read() logging.info('result: {}'.format(result)) def desktop_mirror(): stream_url = self._stream_server.url.format(ip=myip(remote_ip)) data_as_json = json.dumps({ 'method': 'Player.Open', 'id': 1, 'jsonrpc': '2.0', 'params': { 'item': { 'file': stream_url } } }) url = 'http://{}:{}/jsonrpc'.format(remote_ip, remote_port) logging.info('url = {}'.format(url)) logging.info(' json = {}'.format(data_as_json)) req = urllib2.Request(url, data_as_json, {'Content-Type': 'application/json'}) response = urllib2.urlopen(req, None, 5) result = response.read() logging.info('result: {}'.format(result)) result = json.loads(result) #switch back to json with pretty format logging.debug(json.dumps(result, indent=4)) #logging.info('Got streaming url: {}'. # format(self._stream_server.url)) #if service == '_desktop-mirror._tcp': # desktop_mirror() #else: # xbmc() desktop_mirror() @property def targets(self): if not hasattr(self, '_avahi_browse'): return dict() return self._avahi_browse.targets @property def hosts(self): if not hasattr(self, '_avahi_browse'): return dict() return self._avahi_browse.hosts def run(self): self._avahi_browse = AvahiService( lambda data: self.handler('avahi', data)) self._stream_recever = StreamReceiver( lambda data: self.handler('srx', data)) self._threads.append(self._avahi_browse) self._threads.append(self._stream_recever) for thread in self._threads: thread.start() for thread in self._threads: thread.join() def stop(self): for thread in self._threads: logging.debug('Stopping thread - {}'.format(thread.name)) thread.stop() self.stream_server_stop() def launch_selection_area_process(self): SelectionArea(lambda data: self.handler('selection', data)).start() def register_listener(self, ui_window): self._event_handler.register_listener(ui_window) def on_event_relay(self, event_name, data): self._event_handler.on_event_relay(event_name, data) def on_event_stream_ready(self, event_name, data): self._event_handler.on_event_stream_ready(event_name, data) def handler(self, obj_id, data): self._event_handler.handler(obj_id, data) def signal_handler(self, signum, frame): logging.info('signal: ' + str(signum)) if signal.SIGTERM == signum: self.send_form_destroy() try: if CrossPlatform.get().is_linux(): if signal.SIGCHLD == signum: os.waitpid(-1, os.WNOHANG) except OSError: pass