//---------------funcion encargado de recibir conexiones de CPUs   -------------------------
int recibir_conexion(){


	int socketCpu;
	int id;


		socketCpu = crearSocketParaAceptarSolicitudes(socketEscucha); //

		recibirMensajeCompleto(socketCpu, &id, sizeof(int));// recibo id de CPU


		pthread_mutex_lock(&cpuss);

		list_add(CPUs, cpu_create(id,1,socketCpu)); // guardo en la lista

		pthread_mutex_unlock(&cpuss);

		enviarMensaje(socketCpu,&quantum,sizeof(quantum)); // le mando el quantum, que es un int

		FD_SET(socketCpu, &master); // Agrega socketCpu al master set
		if (socketCpu > fdmax) { // es el mayor
			fdmax = socketCpu; // guardo el mayor
		}

		read_fds = master; // actualizo el temporal

		sem_post(&solicitud_cpuLibre); // desperta a al hilo "ejecutar_proceso"


	return 0;
}
int main(void) {

	tipoConfigSWAP* configuracion = cargarArchivoDeConfiguracionDeSWAP("cfgSWAP");

	int socketSwap = crearSocket();

	t_list* listaPaginas = list_create();

	asociarAPuerto(socketSwap,configuracion->puertoDeEscucha);

	escucharConexiones(socketSwap,1);

	int socketMemoria = crearSocketParaAceptarSolicitudes(socketSwap);

	while(ejecutando){

	tipoInstruccion* instruccionRecibida = recibirInstruccion(socketMemoria);

	tipoRespuesta* respuestaAMemoria = atenderInstruccion(instruccionRecibida,listaPaginas);

	enviarRespuesta(socketMemoria,respuestaAMemoria);

	}

	liberarSocket(socketMemoria);

	liberarSocket(socketSwap);

	destruirConfigSWAP(configuracion);

	return EXIT_SUCCESS;
}
void conectar_maestroCPU(){

	socketEscucha = crearSocket();

	asociarAPuerto(socketEscucha,puerto);

	printf(BLANCO "\n\n             Esperando Conexion de CPU...\n\n" FINDETEXTO);

	// me pongo a escuchar conexiones
	escucharConexiones(socketEscucha,5); //se bloquea hasta q haya cpus nuevas

	socketMaestro = crearSocketParaAceptarSolicitudes(socketEscucha); //


}
int main(void) {
	int socketEscuchaCPU = crearSocket();
	asociarAPuerto(socketEscuchaCPU, PUERTOCPU);
	escucharConexiones(socketEscuchaCPU, 1);
	int socketCPU = crearSocketParaAceptarSolicitudes(socketEscuchaCPU);

	while(1)
	{
		tipoInstruccion* instruccion = recibirInstruccion(socketCPU);
		printf("INSTRUCCION RECIBIDA | pID: %i | instruccion: %c | numeroDePagina: %i | texto: %s\n", instruccion->pid, instruccion->instruccion, instruccion->nroPagina, instruccion->texto);

		tipoRespuesta respuesta;
		respuesta.respuesta = 'p';
		respuesta.informacion = "contenido de la pagina";
		enviarRespuesta(socketCPU, &respuesta);
		printf("RESPUESTA ENVIADA | respuesta: %c | informacion: %s\n", respuesta.respuesta, respuesta.informacion);
	}
	liberarSocket(socketCPU);
	liberarSocket(socketEscuchaCPU);
	return EXIT_SUCCESS;
}
int main(void) {

//////////////////////////INICIALIZACION DE VARIABLES////////////////////////////////

	tipoConfigMemoria* configuracion = cargarArchivoDeConfiguracionDeMemoria("cfgMemoria");

	int socketParaCpus = crearSocket();

	int socketParaSwap = crearSocket();

	int socketCpuEntrante;

	bool memoriaActiva = true;

//--------------ACA EMPIEZA FERNILANDIA--------------------------
	//t_list* listaRAM = list_create();
	//t_list* listaTLB = list_create();
	//t_list* listaAdministracionPaginas = list_create();

	fd_set listaPrincipal;
	fd_set listaFiltrada;

	FD_ZERO(&listaPrincipal);
	FD_ZERO(&listaFiltrada);
	FD_SET(socketParaCpus,&listaPrincipal);

	tipoEstructuraMemoria* datosMemoria = malloc(sizeof(tipoEstructuraMemoria));

	//datosMemoria->listaRAM = listaRAM;

	//datosMemoria->listaTLB = listaTLB;

	datosMemoria->socketSWAP = socketParaSwap;

	datosMemoria->maximoSocket = socketParaCpus;

	datosMemoria->configuracion = configuracion;

	datosMemoria->cpusATratar = &listaFiltrada;

	//datosMemoria->administradorPaginas = listaAdministracionPaginas;

	datosMemoria->memoriaActiva = &memoriaActiva;

	datosMemoria->socketCpus = socketParaCpus;

	setearEstructuraMemoria(datosMemoria);

//-------------END OF FERNILANDIA-----------------------------------

	asociarAPuerto(socketParaCpus,configuracion->puertoDeEscucha);

	conectarAServidor(socketParaSwap,configuracion->ipSWAP,configuracion->puertoSWAP);

	escucharConexiones(socketParaCpus,maxConexionesEntrantes);

	pthread_t hiloSignals;

	crearThread(&hiloSignals,funcionPrueba,datosMemoria);


/////////////////////////////////////////////////////////////////////////////////////


	while(memoriaActiva){

		FD_ZERO(&listaFiltrada);

		listaFiltrada = listaPrincipal;

		select(datosMemoria->maximoSocket+1,&listaFiltrada,NULL,NULL,NULL);

		if(FD_ISSET(socketParaCpus,&listaFiltrada)){
			socketCpuEntrante = crearSocketParaAceptarSolicitudes(socketParaCpus);
			FD_SET(socketParaCpus,&listaPrincipal);
			FD_SET(socketCpuEntrante,&listaFiltrada);
			datosMemoria->maximoSocket = maximoEntre(datosMemoria->maximoSocket,socketCpuEntrante);
		}

		tratarPeticiones(&datosMemoria);

	}

	destruirConfigMemoria(configuracion);

	return EXIT_SUCCESS;
}