Esempio n. 1
0
 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'))
Esempio n. 2
0
 def refresh_files(self):
     self.__internal_send__(
         DockerMessage(docker_command='refresh', message="clai reload"))
Esempio n. 3
0
 def send_message(self, message: str):
     self.__internal_send__(
         DockerMessage(docker_command='send_message', message=message))
Esempio n. 4
0
 def unselect_skill(self, skill_name):
     self.__internal_send__(
         DockerMessage(docker_command='unselect_skill',
                       message=f'clai deactivate {skill_name}'))
Esempio n. 5
0
 def request_skills(self):
     self.__internal_send__(
         DockerMessage(docker_command='request_skills',
                       message="clai skills"))
Esempio n. 6
0
 def stop_server(self):
     self.__internal_send__(DockerMessage(docker_command='request_stop'))
     self.consumer_messages.wait(timeout=3)
Esempio n. 7
0
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-----")