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))
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)