def __init__(self, radiodns_services): self._radiodns_services = radiodns_services self._dns = DnsResolver() self._proxy_settings = None self._use_http_proxy = False self._radiovis_client = None self._http_client = HttpClientThread(self) self._http_client.start() self._listeners = [] # Get system proxy server settings (from http_proxy environment variable # or web browser settings). proxies = urllib.getproxies() if "http" in proxies: http_proxy = urlparse.urlparse(proxies['http']) self._proxy_settings = ProxySettings( proxy_type=socks.PROXY_TYPE_HTTP, host=http_proxy.hostname, port=http_proxy.port) self.log("HTTP proxy: " + http_proxy.hostname + ", port " + str(http_proxy.port)) else: self._proxy_settings = None
def __init__(self, radiodns_services): self._radiodns_services = radiodns_services self._dns = DnsResolver() self._proxy_settings = None self._use_http_proxy = False self._radiovis_client = None self._http_client = HttpClientThread(self) self._http_client.start() self._listeners = [] # Get system proxy server settings (from http_proxy environment variable # or web browser settings). proxies = urllib.getproxies() if "http" in proxies: http_proxy = urlparse.urlparse(proxies['http']) self._proxy_settings = ProxySettings(proxy_type = socks.PROXY_TYPE_HTTP, host = http_proxy.hostname, port = http_proxy.port) self.log("HTTP proxy: " + http_proxy.hostname + ", port " + str(http_proxy.port)) else: self._proxy_settings = None
class ConnectionManager(object): """ Manages the RadioVIS (Stomp) connection and HTTP connection for retrieving images. """ def __init__(self, radiodns_services): self._radiodns_services = radiodns_services self._dns = DnsResolver() self._proxy_settings = None self._use_http_proxy = False self._radiovis_client = None self._http_client = HttpClientThread(self) self._http_client.start() self._listeners = [] # Get system proxy server settings (from http_proxy environment variable # or web browser settings). proxies = urllib.getproxies() if "http" in proxies: http_proxy = urlparse.urlparse(proxies['http']) self._proxy_settings = ProxySettings( proxy_type=socks.PROXY_TYPE_HTTP, host=http_proxy.hostname, port=http_proxy.port) self.log("HTTP proxy: " + http_proxy.hostname + ", port " + str(http_proxy.port)) else: self._proxy_settings = None def shutdown(self): if self._radiovis_client is not None: self._radiovis_client.stop() self._radiovis_client.remove_listener(self) self._http_client.stop() def add_listener(self, listener): self._listeners.append(listener) def remove_listener(self, listener): self._listeners.remove(listener) def get_cname(self, station): """ Return the CNAME DNS record for the given radio station. """ host = station.get_hostname() return self._dns.get_cname(host) def get_services(self, cname): """ Return a list of the RadioDNS services available on the cname domain. Each entry in the list is a ServiceRecord object. """ services = [] for service in self._radiodns_services: dns_services = self._dns.get_services(service.get_record(), cname, service.get_name()) services.extend(dns_services) return services def enable_http_proxy(self, enable): self._use_http_proxy = enable def connect_radiovis(self, host, port, station, use_proxy_server): """ Establish a RadioVIS Stomp connection at the specified host and port, and optionally route the connection through the proxy server. """ # Dispose of the old RadioVisClient object. if self._radiovis_client is not None: self._radiovis_client.stop() self._radiovis_client.remove_listener(self) self._radiovis_client = None if use_proxy_server: proxy_settings = self._proxy_settings else: proxy_settings = None self._radiovis_client = RadioVisClient(host, port, proxy_settings) self._radiovis_client.add_listener(self) self._radiovis_client.start(text_topic=station.get_text_topic(), image_topic=station.get_image_topic()) def stomp_message(self, message): for listener in self._listeners: listener.stomp_message(message) def radiovis_text(self, text): """ Called from RadioVisClient object when a TEXT message is received. """ for listener in self._listeners: listener.radiovis_text(text) def radiovis_show(self, image_url, link_url, date_time): """ Called from RadioVisClient object when a SHOW message is received. """ for listener in self._listeners: listener.radiovis_show(image_url, link_url, date_time) if image_url is not None: self._request_image(image_url) def _request_image(self, url): proxy_settings = None if self._use_http_proxy: proxy_settings = self._proxy_settings self._http_client.request(url, proxy_settings) def http_received_data(self, data): """ Called from HttpClientThread object when a file has been downloaded over HTTP. """ if data is not None: for listener in self._listeners: listener.radiovis_image(data) def log(self, message): logging.info(message)
class ConnectionManager(object): """ Manages the RadioVIS (Stomp) connection and HTTP connection for retrieving images. """ def __init__(self, radiodns_services): self._radiodns_services = radiodns_services self._dns = DnsResolver() self._proxy_settings = None self._use_http_proxy = False self._radiovis_client = None self._http_client = HttpClientThread(self) self._http_client.start() self._listeners = [] # Get system proxy server settings (from http_proxy environment variable # or web browser settings). proxies = urllib.getproxies() if "http" in proxies: http_proxy = urlparse.urlparse(proxies['http']) self._proxy_settings = ProxySettings(proxy_type = socks.PROXY_TYPE_HTTP, host = http_proxy.hostname, port = http_proxy.port) self.log("HTTP proxy: " + http_proxy.hostname + ", port " + str(http_proxy.port)) else: self._proxy_settings = None def shutdown(self): if self._radiovis_client is not None: self._radiovis_client.stop() self._radiovis_client.remove_listener(self) self._http_client.stop() def add_listener(self, listener): self._listeners.append(listener) def remove_listener(self, listener): self._listeners.remove(listener) def get_cname(self, station): """ Return the CNAME DNS record for the given radio station. """ host = station.get_hostname() return self._dns.get_cname(host) def get_services(self, cname): """ Return a list of the RadioDNS services available on the cname domain. Each entry in the list is a ServiceRecord object. """ services = [] for service in self._radiodns_services: dns_services = self._dns.get_services(service.get_record(), cname, service.get_name()) services.extend(dns_services) return services def enable_http_proxy(self, enable): self._use_http_proxy = enable def connect_radiovis(self, host, port, station, use_proxy_server): """ Establish a RadioVIS Stomp connection at the specified host and port, and optionally route the connection through the proxy server. """ # Dispose of the old RadioVisClient object. if self._radiovis_client is not None: self._radiovis_client.stop() self._radiovis_client.remove_listener(self) self._radiovis_client = None if use_proxy_server: proxy_settings = self._proxy_settings else: proxy_settings = None self._radiovis_client = RadioVisClient(host, port, proxy_settings) self._radiovis_client.add_listener(self) self._radiovis_client.start(text_topic = station.get_text_topic(), image_topic = station.get_image_topic()) def stomp_message(self, message): for listener in self._listeners: listener.stomp_message(message) def radiovis_text(self, text): """ Called from RadioVisClient object when a TEXT message is received. """ for listener in self._listeners: listener.radiovis_text(text) def radiovis_show(self, image_url, link_url, date_time): """ Called from RadioVisClient object when a SHOW message is received. """ for listener in self._listeners: listener.radiovis_show(image_url, link_url, date_time) if image_url is not None: self._request_image(image_url) def _request_image(self, url): proxy_settings = None if self._use_http_proxy: proxy_settings = self._proxy_settings self._http_client.request(url, proxy_settings) def http_received_data(self, data): """ Called from HttpClientThread object when a file has been downloaded over HTTP. """ if data is not None: for listener in self._listeners: listener.radiovis_image(data) def log(self, message): logging.info(message)