コード例 #1
0
ファイル: event.py プロジェクト: woogiee/sonospy
    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)
コード例 #2
0
ファイル: LightController.py プロジェクト: AlanDThiessen/atha
 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)
コード例 #3
0
ファイル: event.py プロジェクト: aleixq/python3-brisa
    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
コード例 #4
0
ファイル: event.py プロジェクト: woogiee/sonospy
    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)
コード例 #5
0
    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
コード例 #6
0
ファイル: event.py プロジェクト: woogiee/sonospy
    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()
コード例 #7
0
ファイル: event.py プロジェクト: aleixq/python3-brisa
    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)
コード例 #8
0
    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)
コード例 #9
0
ファイル: event.py プロジェクト: woogiee/sonospy
    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