int main(int argc, const char * argv[]) { char command[MAXCOMMAND]; char *commandArgv[MAXCOMMANDARGS]; int commandArgc = 0; int loggedIn = 0; /*Ao alterar a lista de comandos, é necessário alterar a constante TOTALCOMMANDS*/ char *listCommands[] = {"exit","help","login","logout","lista","mudapass","pesquisa","marca","desmarca"}; /*Lista de argumentos de cada comando*/ char *listCommandsArgs[] = {"","","[username] [password]","","","[passwordantiga] [passwordnova]","[origem] [destino]", "[id] [passaporte]","[id] [passaporte]"}; /*Total de argumentos de cada comando*/ int listCommandsArgc[] = {0,0,2,0,0,2,2,2,2}; /*Request*/ req = NULL; /*Sinal para parar*/ signal(SIGUSR1,stopClient); while (1) { promptShell("agente"); /*Ler comando e interpretar os argumentos*/ if (readCommand(command,commandArgv,&commandArgc) == 1) continue; /*Verificar se o comando existe*/ if (checkCommand(listCommands,listCommandsArgs,listCommandsArgc,TOTALCOMMANDS,commandArgv[0],commandArgc) == 0) { continue; } /*Executar comando*/ if (strcmp(commandArgv[0],"exit") == 0) break; else if (strcmp(commandArgv[0],"help") == 0) { printf("Comandos disponíveis:\n"); showCommandList(listCommands,listCommandsArgs,listCommandsArgc,TOTALCOMMANDS); } else if (!loggedIn) { /*Verificar login*/ if (strcmp(commandArgv[0],"login") == 0) { /*ToDo: colocar no checkCommand a validação de argumentos*/ if (commandArgc != 3) { printf("login:\n Argumentos possíveis: [username] [password]\n"); } else { /*Efectuar login do Administrador*/ req = doLogin(commandArgv[1],commandArgv[2]); loggedIn = req != NULL; } } else printf("Iniciar sessão pelo comando \"login\"\n"); } else if (strcmp(commandArgv[0],"login") == 0) { printf("Sessão já foi iniciada: %s\n",req->username); printf("Utilize o comando \"logout\" para terminar a sessão actual\n"); } else if (strcmp(commandArgv[0],"logout") == 0) { if (doLogout(req)) { destroyClientPipe(req); req = NULL; loggedIn = 0; } } else { switch (doJob(command,commandArgv,&commandArgc,req)) { case PASSCHANGED: if (doLogout(req)) { printf("Efectue o início de sessão com a nova password\n"); destroyClientPipe(req); req = NULL; loggedIn = 0; } break; } } } /*Logout*/ doLogout(req); /*Dependências*/ destroyClientPipe(req); return 0; }
void CCommandLayer::processNetMsg(int type, google::protobuf::Message *msg) { this->setVisible(true); switch (type) { case CommanderMsg: { CommanderResponse *res = (CommanderResponse*)msg; m_commandData.cityInfo.read(res->info()); for (int i = 0; i < res->citylist_size(); i++) { CCity city; city.read(res->citylist(i)); m_commandData.cityList.push_back(city); } showCommandList(); } break; case LevelUpMsg: { LevelUpResponse *res = (LevelUpResponse*)msg; //1 升级成功,2 粮食不足,3 指挥府等级限制,4 已达到最大等级,5 数据错误 switch (res->result()) { case 1: ShowPopTextTip(GETLANGSTR(244)); if (res->has_city()) { UserData *user = DataCenter::sharedData()->getUser()->getUserData(); int food = user->getRoleFood() - m_selectCity->lvFood; user->setRoleFood(food); CSceneManager::sharedSceneManager()->PostMessageA(UPDATE_HERO,0,nullptr,nullptr); m_selectCity->read(res->city()); CCity *city = new CCity; *city = *m_selectCity; CSceneManager::sharedSceneManager()->PostMessageA(UPDATE_BUILD,0,nullptr, city); //更新指挥塔数据 if (m_selectCity->cityId==m_commandData.cityInfo.cityId) { m_commandData.cityInfo = *m_selectCity; } m_tableView->setContentOffset(m_tableView->getContentOffset()); m_tableView->reloadData(); updateSelectCity(m_selectCity); } break; case 2: ShowPopTextTip(GETLANGSTR(241)); break; case 3: ShowPopTextTip(GETLANGSTR(242)); break; case 4: ShowPopTextTip(GETLANGSTR(243)); break; case 5: ShowPopTextTip(GETLANGSTR(170),RGB_RED); break; default: break; } } break; default: break; } }