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, ) )
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))