def __init__(self, service, subscription_duration, delivery_url, http_version, event_reload_time, force_event_reload): self.service = service self.subscription_id = uuid.uuid4() self.delivery_url = delivery_url url = parse_url(delivery_url) self.host = '%s:%d' % (url.hostname, url.port) self.event_key = 0 self.subscription_duration = subscription_duration self.http_version = http_version self.timestamp = datetime.now() self.eventing_variables = {} for name, state_var in self.service.get_variables().items(): state_var.subscribe_for_update(self._update_variable) self.force_event_reload = force_event_reload if not force_event_reload: self.looping_call = LoopingCall(self._send_variables) reactor.add_after_stop_func(self.looping_call.stop) self.looping_call.start(event_reload_time, False) sid = str(self.subscription_id) log.debug('Creating subscriber with subscription id: %s' % sid)
def start(self, controller): logger.debug( 'Starting Light: %s', self.name ) self.actuator = controller.actuator( self.x10Device ) self.CreateDevice() self.AddServices( controller ) self.device.start() reactor.add_after_stop_func(self.device.stop)
def __init__(self, parent_udn, service, event_reload_time, force_event_reload): self.service = service self.parent_udn = parent_udn self.udp_transport = UDPTransport() self.eventing_variables = {} self.event_key = 0 self.event_reload_time = event_reload_time self.force_event_reload = force_event_reload if not self.force_event_reload: self.l_call = LoopingCall(self.send_variables) reactor.add_after_stop_func(self.stop) self._is_running = False
def render_subscriber(self, request, response, compressed_headers): """ Renders the subscribe message for an event. @param request: request object (Cherrypy) @param response: response object (Cherrypy) @note: see Cherrypy documentation for further info about request and response attributes and methods. """ # print "EventController.render_subscriber" # print "request: " + str(request) # print "compressed_headers: " + str(compressed_headers) log.debug('Receiving subscribe request') request_status = self._validate_subscribe_request(request, compressed_headers) # print "request_status: " + str(request_status) if request_status == 200: timeout = int(compressed_headers['timeout'].split("-")[-1]) callback = compressed_headers['callback'][1:-1] log.debug('Subscriber callback: %s' % callback) subscriber = Subscriber(self.service, timeout, callback, request.server_protocol, self.event_reload_time, self.force_event_reload) response_body = self._get_subscribe_response(request, response, subscriber) self.subscribers.append(subscriber) eventing_variables = {} for var_name, state_var in self.service.get_variables().items(): # only event variables whose send events are set to yes # TODO: check if we need to do this change anywhere else if state_var.send_events: eventing_variables[var_name] = state_var.get_value() EventMessage(subscriber, eventing_variables, 1, "") # Try to unsubscribe after the timeout t_call = ThreadedCall(self._auto_remove_subscriber, None, None, None, None, timeout * 1.1, "uuid:" + str(subscriber.subscription_id)) reactor.add_after_stop_func(t_call.stop) t_call.start() log.debug('Subscribe success') return response_body else: return self._build_error(request_status, request, response)
def _auto_remove_subscriber(self, sid): subscriber = self._find_subscriber(sid) if not subscriber: #Already unsubscribe return time_delta = datetime.now() - subscriber.timestamp if time_delta.seconds > subscriber.subscription_duration: log.debug('Subscriber sid:%s timeout' % str(subscriber.subscription_id)) self._remove_subscriber(subscriber) else: subscriber.timestamp = datetime.now() # Try to unsubscribe after the timeout t_call = ThreadedCall(self._auto_remove_subscriber, None, None, None, None, subscriber.subscription_duration * 1.1, sid) reactor.add_after_stop_func(t_call.stop) t_call.start()
def render_subscriber(self, request, response, compressed_headers): """ Renders the subscribe message for an event. @param request: request object @param response: response object """ log.debug('Receiving subscribe request') request_status = self._validate_subscribe_request(request, compressed_headers) if request_status == 200: timeout = int(compressed_headers['timeout'].split("-")[-1]) callback = compressed_headers['callback'][1:-1] log.debug('Subscriber callback: %s' % callback) subscriber = Subscriber(self.service, timeout, callback, request.server_protocol, self.event_reload_time, self.force_event_reload) response_body = self._get_subscribe_response(request, response, subscriber) self.subscribers.append(subscriber) eventing_variables = {} for var_name, state_var in list(self.service.get_variables().items()): eventing_variables[var_name] = state_var.get_value() EventMessage(subscriber, eventing_variables, 1, "") # Try to unsubscribe after the timeout t_call = ThreadedCall(self._auto_remove_subscriber, None, None, None, None, timeout * 1.1, "uuid:" + str(subscriber.subscription_id)) reactor.add_after_stop_func(t_call.stop) t_call.start() log.debug('Subscribe success') return response_body else: return self._build_error(request_status, request, response)
def render_subscriber(self, request, response, compressed_headers): """ Renders the subscribe message for an event. @param request: request object @param response: response object """ log.debug('Receiving subscribe request') request_status = self._validate_subscribe_request( request, compressed_headers) if request_status == 200: timeout = int(compressed_headers['timeout'].split("-")[-1]) callback = compressed_headers['callback'][1:-1] log.debug('Subscriber callback: %s' % callback) subscriber = Subscriber(self.service, timeout, callback, request.server_protocol, self.event_reload_time, self.force_event_reload) response_body = self._get_subscribe_response( request, response, subscriber) self.subscribers.append(subscriber) eventing_variables = {} for var_name, state_var in self.service.get_variables().items(): eventing_variables[var_name] = state_var.get_value() EventMessage(subscriber, eventing_variables, 1, "") # Try to unsubscribe after the timeout t_call = ThreadedCall(self._auto_remove_subscriber, None, None, None, None, timeout * 1.1, "uuid:" + str(subscriber.subscription_id)) reactor.add_after_stop_func(t_call.stop) t_call.start() log.debug('Subscribe success') return response_body else: return self._build_error(request_status, request, response)
def __init__(self, parent_udn, service, event_reload_time, force_event_reload): self.service = service self.parent_udn = parent_udn self.udp_transport = UDPTransport() self.listen_udp = UDPListener(UPnPDefaults.MULTICAST_EVENT_ADDR, UPnPDefaults.MULTICAST_EVENT_PORT, data_callback=self._datagram_received, shared_socket=self.udp_transport.socket) self.eventing_variables = {} self.event_key = 0 self.event_reload_time = event_reload_time self.force_event_reload = force_event_reload if not self.force_event_reload: self.l_call = LoopingCall(self.send_variables) reactor.add_after_stop_func(self.stop) self._is_running = False