def realtime_situation_on_message(self, _websocket, message: str) -> None:
        """Websocket callback when a new realtime situation message arrives

        Args:
            websocket (Websocket): communication socket
            message (str): received message
        """

        if self.state == self.State.REALTIME_SITUATION_LOGIN:
            if not self.messages.parse_realtime_situation_login(
                    json.loads(message)):
                self.logger.error("Test run failed. Exiting.")
                self.stop_connection_threads()
            else:
                self.state = self.State(self.state.value + 1)
                self.send_request()

            return

        elif self.state == self.state.WAIT_FOR_STARTUP_SITUATION:
            wnt_message = wnt_proto.Message()
            wnt_message.ParseFromString(message)

            if wnt_message.HasField("rtsituation_metadata"):
                self.total_node_count += wnt_message.rtsituation_metadata.node_count

            if wnt_message.HasField("source_address") and wnt_message.HasField(
                    "network_id"):
                # Here it would be good to count distinct node count
                self.loaded_node_count += 1

            if self.loaded_node_count == self.total_node_count:
                # Initial nodes' data loaded
                self.state = self.State(self.state.value + 1)

        wnt_message = wnt_proto.Message()
        wnt_message.ParseFromString(message)

        # self.logger.info(str(wnt_message))

        node_message = {}
        if wnt_message.HasField("online_status") or wnt_message.HasField(
                "node_metadata") or wnt_message.HasField(
                    "rx_time") or wnt_message.HasField("tx_time"):
            node_message['id'] = wnt_message.source_address
            node_message['rx_time'] = wnt_message.rx_time
            node_message['tx_time'] = wnt_message.tx_time
            node_message['status'] = wnt_message.online_status.status
            node_message['time1'] = wnt_message.online_status.update_time
            node_message[
                'time2'] = wnt_message.online_status.last_time_series_write
            node_message['name'] = wnt_message.node_metadata.name
            node_message['desc'] = wnt_message.node_metadata.description
            node_message['lat'] = wnt_message.node_metadata.latitude
            node_message['lng'] = wnt_message.node_metadata.longitude
            node_message['alt'] = wnt_message.node_metadata.altitude
            node_message['time3'] = wnt_message.node_metadata.update_time

            self.return_message['tags'].append(node_message)
    def realtime_situation_on_message(self, _websocket, message: str) -> None:
        """Websocket callback when a new realtime situation message arrives

        Args:
            websocket (Websocket): communication socket
            message (str): received message
        """
        if self.state == self.State.REALTIME_SITUATION_LOGIN:
            if not self.messages.parse_realtime_situation_login(json.loads(message)):
                self.logger.error("Test run failed. Exiting.")
                self.stop_connection_threads()
            else:
                self.state = self.State(self.state.value + 1)
                self.send_request()

        elif self.state == self.state.WAIT_FOR_STARTUP_SITUATION:
            wnt_message = wnt_proto.Message()
            wnt_message.ParseFromString(message)

            if wnt_message.HasField("rtsituation_metadata"):
                self.total_node_count += wnt_message.rtsituation_metadata.node_count

            if wnt_message.HasField("source_address") and wnt_message.HasField(
                "network_id"
            ):
                # Here it would be good to count distinct node count
                self.loaded_node_count += 1

            if self.loaded_node_count == self.total_node_count:
                # Initial nodes' data loaded
                self.state = self.State(self.state.value + 1)
                self.send_request()

        # The response might come from the realtime situation connection before
        # the metadata connection
        elif (
            self.state == self.state.WAIT_FOR_APPLICATION_CONFIGURATION
            or self.state == self.State.SET_APPLICATION_CONFIGURATION
        ):
            wnt_message = wnt_proto.Message()
            wnt_message.ParseFromString(message)

            if wnt_message.HasField("app_config"):
                app_config_string = str(
                    binascii.hexlify(wnt_message.app_config.app_config), "utf-8"
                )
                self.logger.info(
                    "App config message received from {}:{} with diagnostics "
                    "interval {} and application data {}".format(
                        wnt_message.network_id,
                        wnt_message.source_address,
                        wnt_message.app_config.interval,
                        app_config_string,
                    )
                )
示例#3
0
    def on_message(self, websocket, message) -> None:
        """
        Websocket callback when a new authentication message arrives

        Args:
            websocket (Websocket): communication socket
            message (str): received message
        """

        if self._is_ready.is_set():
            proto_message = wnt_proto.Message()
            try:
                proto_message.ParseFromString(message)
            except TypeError:
                message = json.loads(message)
                if message["result"] != 1:
                    raise ValueError("Could not login")

            self._write(proto_message)
        else:
            if self.messages.parse_realtime_situation_login(
                    json.loads(message)):
                super().on_open(websocket)
            else:
                raise ValueError("Could not log in to realtime endpoint")
    def realtime_situation_on_message(self, _websocket, message: str) -> None:
        """Websocket callback when a new realtime situation message arrives

        Args:
            websocket (Websocket): communication socket
            message (str): received message
        """
        if self.state == self.State.REALTIME_SITUATION_LOGIN:
            if not self.messages.parse_realtime_situation_login(
                    json.loads(message)):
                self.logger.error("Test run failed. Exiting.")
                self.stop_connection_threads()
            else:
                self.state = self.State(self.state.value + 1)
                self.send_request()

            return

        elif self.state == self.state.WAIT_FOR_STARTUP_SITUATION:
            wnt_message = wnt_proto.Message()
            wnt_message.ParseFromString(message)

            if wnt_message.HasField("rtsituation_metadata"):
                self.total_node_count += wnt_message.rtsituation_metadata.node_count

            if wnt_message.HasField("source_address") and wnt_message.HasField(
                    "network_id"):
                # Here it would be good to count distinct node count
                self.loaded_node_count += 1

            if self.loaded_node_count == self.total_node_count:
                # Initial nodes' data loaded
                self.state = self.State(self.state.value + 1)
                self.send_request()

        else:
            wnt_message = wnt_proto.Message()
            wnt_message.ParseFromString(message)

            if wnt_message.HasField("gateway_info"):
                self.logger.info("gateway_info:\n{}".format(
                    wnt_message.gateway_info))

            if wnt_message.HasField("backend_component_info"):
                self.logger.info("backend_component_info:\n{}".format(
                    wnt_message.backend_component_info))