def start(self): print(f"-Start docker bridge-") self.emulator_docker_log_conector.start() self.consumer_messages = self.pool.map_async( __consumer__, ((self.queue, self.emulator_docker_log_conector.log_queue, self.queue_out), )) self.__internal_send__(DockerMessage(docker_command='start'))
def refresh_files(self): self.__internal_send__( DockerMessage(docker_command='refresh', message="clai reload"))
def send_message(self, message: str): self.__internal_send__( DockerMessage(docker_command='send_message', message=message))
def unselect_skill(self, skill_name): self.__internal_send__( DockerMessage(docker_command='unselect_skill', message=f'clai deactivate {skill_name}'))
def request_skills(self): self.__internal_send__( DockerMessage(docker_command='request_skills', message="clai skills"))
def stop_server(self): self.__internal_send__(DockerMessage(docker_command='request_stop')) self.consumer_messages.wait(timeout=3)
def __consumer__(args): queue, log_queue, queue_out = args my_clai = None socket = None print('starting reading from the queue') while True: docker_message: DockerMessage = queue.get() if docker_message is None: break print( f"message_received: {docker_message.docker_command}:{docker_message.message}" ) if docker_message.docker_command == 'start': my_clai = __start_docker() log_queue.put( DockerMessage(docker_command='start_logger', message=my_clai.name)) elif docker_message.docker_command == 'send_message' \ or docker_message.docker_command == 'request_skills' \ or docker_message.docker_command == 'unselect_skill' \ or docker_message.docker_command == 'refresh' \ or docker_message.docker_command == 'select_skill': if my_clai: print(f'socket {socket}') if not socket: socket = my_clai.exec_run(cmd="bash -l", stdin=True, tty=True, privileged=True, socket=True) wait_server_is_started() if docker_message.docker_command == 'refresh': copy_files(my_clai) command_to_exec = docker_message.message + '\n' socket.output._sock.send(command_to_exec.encode()) stdout = read(socket) reply = None if docker_message.docker_command == 'request_skills' \ or docker_message.docker_command == 'unselect_skill': reply = DockerReply(docker_reply='skills', message=stdout) elif docker_message.docker_command == 'send_message': socket.output._sock.send("clai last-info\n".encode()) info = read(socket) reply = DockerReply(docker_reply='reply_message', message=stdout, info=info) if reply: queue_out.put(reply) elif docker_message == 'request_stop': if my_clai: my_clai.kill() break queue.task_done() print("----STOP CONSUMING-----")