Ejemplo n.º 1
0
int procesarPedidoDeRecurso(char *cajaABuscar, Nivel *nivel, int socketNivel, t_queue *objetosABuscar, int socketPlanificador, int socketOrquestador) {
	int recursoAsignado;
	log_debug(logger, "El personaje: (%s) pedira el recurso (%s) porque llego a la caja correspondiente.", personaje->nombre, cajaABuscar);
	recursoAsignado = pedirRecurso(*cajaABuscar, socketNivel);
	if (!recursoAsignado) {
		log_debug(logger, "El personaje:(%s) se bloqueo a causa de que el recurso (%s) no esta disponible", personaje->nombre, cajaABuscar);
		avisarDelBloqueo(socketPlanificador, cajaABuscar);
		esperarDesbloqueo(socketOrquestador);
		if (!queue_is_empty(objetosABuscar)) {
			log_debug(logger, "El personaje (%s) fue desbloqueado y continua con el nivel.", personaje->nombre);
			MPS_MSG msgAEnviar;
			armarMensaje(&msgAEnviar,CONTINUA_NIVEL,1,"1");
			enviarMensaje(socketPlanificador,&msgAEnviar);
		}else{
			log_debug(logger, "El personaje (%s) fue desbloqueado y termina el nivel.", personaje->nombre);
			MPS_MSG msgAEnviar;
			armarMensaje(&msgAEnviar,TERMINA_NIVEL,1,"1");
			enviarMensaje(socketPlanificador,&msgAEnviar);
			close(socketPlanificador);
			return true;
		}

	} else {
		log_debug(logger, "El personaje: (%s) recibio el recurso(%s) con exito!", personaje->nombre, cajaABuscar);
		if (!queue_is_empty(objetosABuscar)) {
			recursoObtenido(socketPlanificador);
		}
	}

	return false;
}
Ejemplo n.º 2
0
void hacerMovimiento(t_personaje *personaje) {
	if(!tieneRecursoActual(personaje)) {
		leerSiguienteRecurso(personaje);
		if(!personaje->nivel_actual) {
			return;
		}
	}

	log_info(logger, "Posicion del recurso: (%d, %d), mi posicion: (%d, %d).", personaje->recursoActual->pos->x, personaje->recursoActual->pos->y, personaje->pos->x, personaje->pos->y);

	char* recursoBloqueante = "";

	mover(personaje);
	if(samePoint(personaje->pos, personaje->recursoActual->pos)) {
		recursoBloqueante = pedirRecurso(personaje);
		log_debug(logger, string_equals_ignore_case(recursoBloqueante, "0") ? "Recurso otorgado" : "Bloqueado! Recurso no otorgado");
	}

	t_mensaje* requestMovimiento = mensaje_create(MOVER, pointAsString(*personaje->pos));
	socketSend(personaje->connNivel, requestMovimiento, handleConnectionError);
	pedirSiguienteTurno(personaje, recursoBloqueante);
}