| | |
| | | import sys # NOQA: E402 |
| | | import os |
| | | from time import sleep |
| | | import pika |
| | | import queue |
| | | from datetime import datetime |
| | | |
| | | # from .CaptureThread import CaptureThread |
| | | # from .ControllThread import ControllThread |
| | |
| | | # src_path = os.path.abspath(src_path) |
| | | # sys.path.insert(0, src_path) |
| | | |
| | | # from ..protos import aerial_pb2 as pb |
| | | from ..protos import aerial_pb2 as pb |
| | | |
| | | |
| | | IMAGE_WIDTH = 3840 |
| | |
| | | def _connect_to_MQ(self): |
| | | credentials = pika.PlainCredentials(self.MQuser, self.MQpassword) |
| | | self.parameters = pika.ConnectionParameters( |
| | | credentials=credentials, host=self.MQhost) |
| | | credentials=credentials, host=self.MQhost,heartbeat=0) |
| | | # 连接队列服务器 |
| | | try: |
| | | self.connection = pika.BlockingConnection(self.parameters) |
| | |
| | | MQparams=self.parameters, |
| | | exchange_name='commands_topic', |
| | | exchange_type='topic', |
| | | MQqueue_name="server0_commands_queue", |
| | | MQqueue_name=f"{self.device_id}_commands_queue", |
| | | binding_keys=[f"{self.device_id}"], |
| | | message_queue=self.CommandsReceiver_queue |
| | | ) |
| | |
| | | timeout=self.timeout, |
| | | logs_queue=self.LogsSender_queue, |
| | | device_id=self.device_id, |
| | | routing_key="server0" |
| | | init_binding_key=self.device_id, |
| | | init_routing_key="server0" |
| | | ) |
| | | |
| | | self.mc = microwaveController( |
| | | MicrowaveHost=self.MICROWAVEhost, |
| | | MicrowavePort=self.MICROWAVEport, |
| | | init_packet_threshold=100, |
| | | init_timeusage_threshold=3, |
| | | init_timeusage_threshold=0.2, |
| | | device_id=self.device_id, |
| | | logs_queue=self.LogsSender_queue, |
| | | plys_queue=self.PlysSender_queue, |
| | | routing_key="server0" |
| | | init_binding_key=self.device_id, |
| | | init_routing_key="server0" |
| | | ) |
| | | |
| | | def command_control(self): |
| | | while True: |
| | | |
| | | try: |
| | | while not self.CommandsReceiver_queue.empty(): |
| | | command_bytes= self.CommandsReceiver_queue.get() |
| | | |
| | | # parse the command from bytes to the pb object |
| | | req_command = pb.CommandMessage() |
| | | req_command.ParseFromString(command_bytes) |
| | | |
| | | # extracting some info for use |
| | | source = req_command.source |
| | | generatetime = req_command.generatetime |
| | | syscommand = req_command.syscommand |
| | | subcommand = req_command.subcommand |
| | | targetclient = req_command.targetclient |
| | | returnserver = req_command.returnserver |
| | | taskuuid = req_command.taskuuid |
| | | |
| | | curr_time = datetime.now().strftime('%Y-%m-%d-%H-%M-%S') |
| | | print(f"[x] {curr_time}|(From {source}): task [{taskuuid}] received!" ) |
| | | |
| | | # command for camera |
| | | if syscommand == pb.SysCommand.CAMERA_COMMAND: |
| | | # capture image |
| | | if subcommand == pb.SubCommand.ONE_TIME_CAPTURE: |
| | | self.cc.capture(routing_key=returnserver,taskuuid=taskuuid) |
| | | # unknown command |
| | | else: |
| | | pass |
| | | |
| | | # command for microwave device |
| | | elif syscommand == pb.SysCommand.MICROWAVE_COMMAND: |
| | | if subcommand == pb.SubCommand.ONE_CIRCLE_SCAN: |
| | | self.mc.scan(routing_key=returnserver,taskuuid=taskuuid) |
| | | # unknown command |
| | | else: |
| | | pass |
| | | |
| | | # command for dust cleaner |
| | | elif syscommand == pb.Syscommand.DUSTCLEANER_COMMAND: |
| | | if subcommand == pb.SubCommand.ONE_CLEAN_SCAN: |
| | | self.dc.clean(routing_key=returnserver,taskuuid=taskuuid) |
| | | # unknown command |
| | | else: |
| | | pass |
| | | # unknown command |
| | | else: |
| | | pass |
| | | |
| | | else: |
| | | sleep(1) |
| | | |
| | | except: |
| | | |
| | | break |
| | | |
| | | |
| | | |
| | | def run_rabbitmq(self): |
| | |
| | | self.run_rabbitmq() |
| | | # connecting to devices and wrap data to the corressponding queue |
| | | self.run_device() |
| | | sleep(10) |
| | | self.command_control() |
| | | |
| | | def stop_all(self): |
| | | |
| | |
| | | # self.stop_all() |
| | | # print("main thread end.") |
| | | self.run_all() |
| | | self.CommandsReceiver_Thread.join() |
| | | return 0 |
| | | |
| | | |