import sys # NOQA: E402 import os from flask import Flask import pika import uuid import queue from werkzeug.wrappers import request from threading import Thread from datetime import datetime from .engine.DeviceManager import DeviceManager from .engine import MessageThreads as ths from .protos import aerial_pb2 as pb class MyServer(Flask): def __init__(self, MQhost:str, MQuser:str, MQpassword:str, WEBhost:str, WEBport:int, save_folder:str, server_name:str ): Flask.__init__(self, __name__) self.MQhost = MQhost self.MQuser = MQuser self.MQpassword = MQpassword self.WEBhost = WEBhost self.WEBport = WEBport self.save_folder = save_folder self.server_name = server_name # self.route('/api', methods=['POST'])(self.api) self.route('/', methods=['GET'])(self.hello) # self._def_routes() # queue self.LogsReceiver_queue = queue.Queue() self.ImagesReceiver_queue = queue.Queue() self.PlysReceiver_queue = queue.Queue() self.CommandsSender_queue = queue.Queue() def _connect_to_MQ(self): credentials = pika.PlainCredentials(self.MQuser, self.MQpassword) self.parameters = pika.ConnectionParameters( credentials=credentials, host=self.MQhost) # 连接队列服务器 try: self.connection = pika.BlockingConnection(self.parameters) print(f"connected to MQ server: {self.MQhost} with user {self.MQuser}") self.connection.close() except Exception : print("Can't connecting to the MQ server") exit(1) def _receiver_Thread_Launcher(self): # launch logs receiver thread self.LogsReceiver_Thread = ths.receiverThread( MQparams=self.parameters, exchange_name='logs_topic', exchange_type='topic', MQqueue_name=f'logs_queue', binding_keys=['server.logs.test0'], message_queue=self.LogsReceiver_queue ) self.LogsReceiver_Thread.setDaemon(True) self.LogsReceiver_Thread.setName("logs_thread") self.LogsReceiver_Thread.start() # launch images receiver thread self.ImagesReceiver_Thread = ths.receiverThread( MQparams=self.parameters, exchange_name='images_topic', exchange_type='topic', MQqueue_name=f'images_queue', binding_keys=["server.images.test0"], message_queue=self.ImagesReceiver_queue ) self.ImagesReceiver_Thread.setDaemon(True) self.ImagesReceiver_Thread.setName("images_thread") self.ImagesReceiver_Thread.start() # launch plys receiver thread self.PlysReceiver_Thread = ths.receiverThread( MQparams=self.parameters, exchange_name='plys_topic', exchange_type='topic', MQqueue_name=f'plys_queue', binding_keys=['server.plys.test0'], message_queue=self.PlysReceiver_queue ) self.PlysReceiver_Thread.setDaemon(True) self.PlysReceiver_Thread.setName("plys_thread") self.PlysReceiver_Thread.start() # launch decode thread queue_list = [self.LogsReceiver_queue,self.ImagesReceiver_queue,self.PlysReceiver_queue] queue_tags = ["Logs", "Images", "Plys"] self.MsgDecoder_Thread = ths.decodeThread( queue_list= queue_list, queue_tags= queue_tags, save_path= self.save_folder ) self.MsgDecoder_Thread.setDaemon(True) self.MsgDecoder_Thread.setName("decode_thread") self.MsgDecoder_Thread.start() def _sender_Thread_Launcher(self): # launcher commands sender thread self.CommandsSender_Thread = ths.senderThread( MQparams=self.parameters, exchange_name='commands_topic', exchange_type='topic', message_queue=self.CommandsSender_queue ) self.CommandsSender_Thread.setDaemon(True) self.CommandsSender_Thread.setName("commands_thread") self.CommandsSender_Thread.start() def hello(self): return 'Hello, This is acquisition demo API!' def run_rabbitmq(self): self._connect_to_MQ() self._receiver_Thread_Launcher() self._sender_Thread_Launcher() def run_all(self): self.run_rabbitmq() self.run(debug=False, host=self.WEBhost, port=self.WEBport)