Example #1
0
void* handle(void* par) {

	signal(SIGPIPE, SIG_IGN);

	HandleThreadParameter* parameter = (HandleThreadParameter*) par;
	int clientSocket = parameter->clientID;
	Server* server = parameter->server;

	std::vector<std::string> withBase = server->listFilesInDirectoryWithBase(
			"sendFiles");
	std::vector<std::string> withoutBase = server->listFilesInDirectory(
			"sendFiles");

	// Manda las imagenes y sonidos necesarios que se utilizaran.
	server->sendFiles(withBase, withoutBase, clientSocket);

	PlayerInfo* info = server->recieveNewPlayer(clientSocket);
	if (!info){
		Logs::logErrorMessage("No se ha recibido la informacion del jugador");
		return NULL;
	}
	string playerName = info->getPlayer()->getName();

	int result = server->isNameAbilivable(playerName);
	server->sendAproval(clientSocket, result);
	if (result != OK) {
		playerName = server->getAbilivableName(playerName);
		server->sendNewName(clientSocket, playerName);
		info->setName(playerName);
		info->getPlayer()->setName(playerName);
	}
	cont++;
	info->getPlayer()->setTeam(cont%2 +1);

	bool playing = true;
	cout << playerName << " has conected and joined team: " << info->getPlayer()->getTeam() <<endl;
	// Antes de agregarlo al juego creo el thread para chequear el estado en el que se encuentra.
	TimerThreadParameter param = {server,clientSocket,playerName, &playing};
	pthread_t timerThread;

	server->addPlayerToGame(clientSocket, info);

	pthread_create(&timerThread,NULL,timerChecker,(void*)&param);

	server->runMainLoop(clientSocket,playerName);

	pthread_cancel(timerThread);
	server->disconectPlayer(clientSocket,playerName);
	close(clientSocket);

	return NULL;

}