示例#1
0
s_cola *ingresarClientes(int n)
{
	int i=0;
	s_cola *colabanco = crearCola();

	for (i = 0; i < n; i++) {
		s_cl *cl = crearCliente();
		encolar(colabanco, cl);
	}

	return colabanco;
}
int main() {
	printf("***************HOLA SOY UN PROCESO NODO\n****************");

	t_config_nodo* arch_config;
	pthread_mutex_init(&numeroMap,NULL);
	pthread_mutex_init(&numeroReduce,NULL);

	printf("Cargando archivo de Configuracion\n");
    arch_config= malloc(sizeof(t_config_nodo));
	arch_config = leerArchivoConfig(ARCHIVO_CONFIG);

	int sockfs;
	pthread_t hiloFS;
//	pthread_t hiloJobs;
//	pthread_t hiloNodos;
	t_hilofs paramHiloFS;

	//sockfs = 1;
	sockfs = crearCliente(arch_config->IP_FS,arch_config->PUERTO_FS);

	paramHiloFS.socket = sockfs;
	paramHiloFS.IP_NODO = arch_config->IP_NODO;
	paramHiloFS.PUERTO_NODO = arch_config->PUERTO_NODO;
	paramHiloFS.ARCH_BIN = arch_config->ARCH_BIN;
	paramHiloFS.NODO_NEW = arch_config->NODO_NEW;
	paramHiloFS.DIR_TEMP = arch_config->DIR_TEMP;
	paramHiloFS.ID = arch_config->ID;

	pthread_create(&hiloFS, NULL, (void*)conexionFS, (void*) &paramHiloFS);
//	pthread_create(&hiloJobs, NULL, (void*)conexionJobs, (void*) &arch_config->PUERTO_NODO);
	if (crearServerMultiHilo(arch_config->PUERTO_NODO,(void*)conexionJobs) == 0)
		printf("Nodo en la espera de conexiones de JOBs y otros Nodos\n");

//	pthread_create(&hiloNodos, NULL, (void*)conexionNodos, (void*) &arch_config->PUERTO_NODO);

    pthread_join(hiloFS,NULL);
    //pthread_join(hiloJobs,NULL);
//    pthread_join(hiloNodos,NULL);

	//Probando un mensaje mandado del nodo al FS
	//send(sockfs,ip,1000 ,0);
	//printf("\n");
	//munmap(DATOS,sizeof(DATOS));
	return 0;

}
void server::aceptar(){
    //Aca el accept va a pisar el cli_addr y este nuevo es el sokete que lo relaciona a ese cliente
    //Deberia meter el nuevo thread por aca
	socklen_t clilen = sizeof(cli_addr);

	 newsockfd = accept(sockfd,(struct sockaddr *) &cli_addr, &clilen);
	if (newsockfd < 0)
	{
		std::stringstream ss;
		ss <<"Server: No se pudo aceptar al cliente " << inet_ntoa(cli_addr.sin_addr) << ".";
		Logger::Instance()->LOG(ss.str(), ERROR);
		return;
	}
	 if(getNumClientes() < MAX_CLIENTES)
	 {
		 //Mensaje connectedMessage = MessageFactory::Instance()->createMessage("", "", msgConnected);//Deprecated
		 //sendMsg(newsockfd, connectedMessage);//Deprecated
		 //Envio del mensaje connected dentro de crear Cliente
		 bool playerCreated = crearCliente(newsockfd);
		 if (!playerCreated)
		 {
			 std::stringstream ss;
			 ss <<"Server: No se pudo aceptar al cliente " << inet_ntoa(cli_addr.sin_addr) << " por nombre inválido.";
			 Logger::Instance()->LOG(ss.str(), WARN);
		 }
	 }
	 else
	 {
		 std::stringstream ss;
		 ss <<"Server: No se pudo aceptar al cliente " << inet_ntoa(cli_addr.sin_addr) << " por falta de capacidad.";
		 Logger::Instance()->LOG(ss.str(), WARN);

		 Mensaje serverFullMessage = MessageFactory::Instance()->createMessage("svfull", "", msgServerFull);
		 sendMsg(newsockfd, serverFullMessage);
		 close(newsockfd);
		 return;
	 }


}