Пример #1
0
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;
}
Пример #2
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;
	}
}