Ejemplo n.º 1
0
int escucharACPU(t_log * logger)
{
	int retorno;
	int fdMemoria = newSocket();
	asociarSocket(fdMemoria,vg_puerto_escucha);
	escucharSocket(fdMemoria,1);

	int fdCPU = aceptarConexionSocket(fdMemoria);

// Veo si quien se conecta es CPU (quien deberia conectarse).
	void * login = malloc(sizeof(char) * 4);
	recibirPorSocket(fdCPU, login, 4);
	int coincide = strcmp((char *) login, "CPU");
	free(login);

	if(coincide != 0)
	{	perror("[ERROR] Se espera conexión del proceso CPU\n");
		int respuesta = 0;
		enviarPorSocket(fdCPU,&respuesta,sizeof(int));
		cerrarSocket(fdCPU);
		retorno = 0;
	}
	else
	{	printf("[OK] Conexión entre Memoria y CPU establecida mediante el puerto: %d\n",vg_puerto_escucha);
		log_info(logger,"Conexión Memoria - CPU establecida mediante el puerto: %d\n",vg_puerto_escucha);
		int respuesta = 1;
		enviarPorSocket(fdCPU,&respuesta,sizeof(int));
		retorno = fdCPU;
	}
	return retorno;
}
void escucharUMC() {

	int sockServidor;

	sockServidor = nuevoSocket();
	asociarSocket(sockServidor, config->puerto);
	escucharSocket(sockServidor, 1);

	int ret_handshake = 0;
	while(ret_handshake == 0) { // Mientras que el cliente adecuado no se conecte
		sockUMC = aceptarConexionSocket(sockServidor);
		if ( validar_conexion(sockUMC, 0) == FALSE ) continue;
		else ret_handshake = handshake_servidor(sockUMC, "S");
	}

	int head;
	while(TRUE) {
		void *mensaje = aplicar_protocolo_recibir(sockUMC, &head);
		if(mensaje == NULL) {
			log_info(logger, "UMC se ha desconectado.");
			cerrarSocket(sockUMC);
			cerrarSocket(sockServidor);
			log_info(logger, "Swap ha salido del sistema.");
			return;
		}
		void (*funcion)(void*) = elegirFuncion(head); // elijo función a ejecutar según protocolo
		if(funcion == NULL) continue;
		funcion(mensaje); // ejecuto función
		funcion = NULL;
	}

	cerrarSocket(sockUMC);
	cerrarSocket(sockServidor);
	log_info(logger, "Swap ha salido del sistema.");
}