示例#1
0
    def run(self):
        """
        drive application
        """
        # clear to go
        assert self.event
        assert self.__emula
        assert self.__q_rcv_cnfg
        assert self.__sck_rcv_cnfg

        # temporização de eventos
        lf_tim_rrbn = self.config.dct_config["tim.rrbn"]

        # ativa o relógio da simulação
        self.start_time()

        # inicia o recebimento de mensagens de configuração
        self.__sck_rcv_cnfg.start()

        # starts flight model
        self.__emula.start()

        # keep things running
        gdata.G_KEEP_RUN = True

        # obtém o tempo inicial em segundos
        lf_now = time.time()

        # application loop
        while gdata.G_KEEP_RUN:
            try:
                # obtém um item da queue de configuração
                llst_data = self.__q_rcv_cnfg.get(False)

                # queue tem dados ?
                if llst_data:
                    # mensagem de aceleração ?
                    if gdefs.D_MSG_ACC == int(llst_data[0]):
                        # acelera/desacelera a aplicação
                        pass  # self.cbkAcelera(float(llst_data [ 1 ]))

                    # mensagem toggle call sign ?
                    elif gdefs.D_MSG_CSG == int(llst_data[0]):
                        # liga/desliga call-sign
                        pass  # self._oView.cbkToggleCallSign()

                    # mensagem configuração de exercício ?
                    elif gdefs.D_MSG_EXE == int(llst_data[0]):
                        # cria um evento de configuração de exercício
                        l_evt = events.CConfigExe(llst_data[1])
                        assert l_evt

                        # dissemina o evento
                        self.event.post(l_evt)
                                                
                    # mensagem de fim de execução ?
                    elif gdefs.D_MSG_FIM == int(llst_data[0]):
                        # termina a aplicação
                        self.cbk_termina()

                    # mensagem de congelamento ?
                    elif gdefs.D_MSG_FRZ == int(llst_data[0]):
                        # freeze application
                        pass  # self._oView.cbkFreeze(False)

                    # mensagem toggle range mark ?
                    elif gdefs.D_MSG_RMK == int(llst_data[0]):
                        # liga/desliga range mark
                        pass  # self._oView.cbkToggleRangeMark()

                    # mensagem de endereço do servidor ?
                    elif gdefs.D_MSG_SRV == int(llst_data[0]):
                        # salva o endereço do servidor
                        self.__dct_config["srv.addr"] = str(llst_data[1])
                                                                                        
                    # mensagem de hora ?
                    elif gdefs.D_MSG_TIM == int(llst_data[0]):
                        # monta uma tupla com a mensagem de hora
                        lt_hora = tuple(int(l_s) for l_s in llst_data[1][1: -1].split(','))

                        # seta a hora de simulação
                        self.sim_time.set_hora(lt_hora)
                                                                                                                                        
                        # cria um evento de configuração de hora de simulação
                        l_evt = events.CConfigHora(self.sim_time.get_hora_format())
                        assert l_evt
                                                                                                                                                                                                                
                        # dissemina o evento
                        self.event.post(l_evt)
                                                                                                                                                                                                                                                                
                    # mensagem de descongelamento ?
                    elif gdefs.D_MSG_UFZ == int(llst_data[0]):
                        # defreeze application
                        pass  # self._oView.cbkDefreeze(False)

                    # senão, mensagem não reconhecida ou não tratavél
                    else:
                        # logger
                        l_log = logging.getLogger("CControlVisil::run")
                        l_log.setLevel(logging.WARNING)
                        l_log.warning("<E02: mensagem não reconhecida ou não tratável.")

            # em caso de não haver mensagens...
            except Queue.Empty:
                # salva o tempo anterior
                lf_ant = lf_now

                # obtém o tempo atual em segundos
                lf_now = time.time()

                # obtém o tempo final em segundos e calcula o tempo decorrido
                lf_dif = lf_now - lf_ant

                # está adiantado ?
                if lf_tim_rrbn > lf_dif:
                    # permite o scheduler
                    time.sleep((lf_tim_rrbn - lf_dif) * .99)

                # senão, atrasou...
                else:
                    # logger
                    l_log = logging.getLogger("CControlVisil::run")
                    l_log.setLevel(logging.WARNING)
                    l_log.warning("<E03: atrasou: {}".format(lf_dif - lf_tim_rrbn))
示例#2
0
    def run(self):
        """
        drive application
        """
        # model and view ok ?
        if (self.model is None) or (self.view is None):
            # termina a aplicação sem confirmação e sem envio de fim
            self.cbk_termina()

        # clear to go
        assert self.event
        assert self.__emula
        assert self.__q_rcv_cnfg
        assert self.__sck_rcv_cnfg

        # temporização de scheduler
        lf_tim_rrbn = self.config.dct_config["tim.rrbn"]

        # keep things running
        gdata.G_KEEP_RUN = True

        # ativa o relógio
        self.start_time()

        # inicia o recebimento de mensagens de configuração
        self.__sck_rcv_cnfg.start()

        # starts flight model
        self.__emula.start()

        # obtém o tempo inicial em segundos
        lf_now = time.time()

        # application loop
        while gdata.G_KEEP_RUN:
            try:
                # obtém um item da queue de configuração (nowait)
                llst_data = self.__q_rcv_cnfg.get(False)
                # cdbg.M_DBG.debug("llst_data: {}".format(llst_data))

                # queue tem dados ?
                if llst_data:
                    # mensagem toggle call sign ?
                    if gdefs.D_MSG_CSG == int(llst_data[0]):
                        # liga/desliga callsign
                        pass  # self.view.cbk_toggle_callsign()

                    # mensagem configuração de exercício ?
                    elif gdefs.D_MSG_EXE == int(llst_data[0]):
                        # cria um evento de configuração de exercício
                        l_evt = events.CConfigExe(llst_data[1])
                        assert l_evt

                        # dissemina o evento
                        self.event.post(l_evt)

                    # mensagem de fim de execução ?
                    elif gdefs.D_MSG_FIM == int(llst_data[0]):
                        # termina a aplicação
                        self.cbk_termina()

                    # mensagem de endereço do servidor ?
                    elif gdefs.D_MSG_SRV == int(llst_data[0]):
                        # salva o endereço do servidor
                        self.__dct_config["srv.addr"] = str(llst_data[1])

                    # mensagem de hora ?
                    elif gdefs.D_MSG_TIM == int(llst_data[0]):
                        # monta uma tupla com a mensagem de hora
                        lt_hora = tuple(int(s) for s in llst_data[1][1: -1].split(','))

                        # seta a hora de simulação
                        self.sim_time.set_hora(lt_hora)

                        # cria um evento de configuração de hora de simulação
                        l_evt = events.CConfigHora(self.sim_time.get_hora_format())
                        assert l_evt

                        # dissemina o evento
                        self.event.post(l_evt)

                    # senão, mensagem não reconhecida ou não tratavél
                    else:
                        # logger
                        l_log = logging.getLogger("CControlPiloto::run")
                        l_log.setLevel(logging.WARNING)
                        l_log.warning("Mensagem não reconhecida ou não tratável.")

            # em caso de não haver mensagens...
            except Queue.Empty, ls_err:
                # salva o tempo anterior
                lf_ant = lf_now

                # obtém o tempo atual em segundos
                lf_now = time.time()

                # obtém o tempo final em segundos e calcula o tempo decorrido
                lf_dif = lf_now - lf_ant

                # está adiantado ?
                if lf_tim_rrbn > lf_dif:
                    # permite o scheduler
                    time.sleep(lf_tim_rrbn - lf_dif)