Пример #1
0
void handler_seniales(int s) {

	desconectar();

	liberar_recursos();

	kill(getpid(), SIGKILL);
}
Пример #2
0
void processo_t::check()
{
	int recurso;
	int sucesso;
	liberar_recursos();
	recurso = use_recurso();
	sucesso = bloquear_recurso(recurso);
	if(sucesso)
	{
		recurso_bloqueado = recurso;
	}
	time_proc -= QUANTUM;
}
Пример #3
0
int main(int argc, char * argv[]) {

	int s, r;
	struct sockaddr_in dest;
	char buffer[MAXBUF];
	struct Mensaje mensaje;

	if (argc < 3) {
		puts("Usage ./cliente [nombre] [pos1] ...");
		return EXIT_FAILURE;
	}

	signal(SIGKILL, handler_seniales);
	signal(SIGTERM, handler_seniales);

	cantidad_barcos_hundidos = 0;

	// Validacion de las posiciones de la matriz
	cantidad_barcos = argc - 2; // Le resto los primeros 2 argumentos: ejecutable y nombre de jugador

	//char * posiciones[cantidad_barcos];

	if (validarPosiciones(argv, posiciones_barcos) == -1) {
		return EXIT_FAILURE;
	}

	//posiciones_barcos = posiciones;

	// Leo ip y puerto del servidor del archivo de configuracion
	struct Conexion conexion = leerConfiguracion();

	if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
		perror("Socket");
		return EXIT_FAILURE;
	}

	/*---Initialize server address/port struct---*/
	bzero(&dest, sizeof(dest));
	dest.sin_family = AF_INET;
	dest.sin_port = htons(conexion.puerto);
	if (inet_aton(conexion.ip, &dest.sin_addr.s_addr) == 0) {
		perror(conexion.ip);
		return EXIT_FAILURE;
	}

	/*---Connect to server---*/
	if (connect(sockfd, &dest, sizeof(dest)) != 0) {
		perror("Connect ");
		return EXIT_FAILURE;
	}

	bzero(buffer, MAXBUF);

	// Enviar nombre jugador
	mensaje.tipo = Registra_Nombre;
	strcpy(mensaje.contenido, argv[1]);

	sleep(2);

	s = send(sockfd, &mensaje, sizeof(mensaje), 0);

	if (s == -1) {
		perror("Error al enviar el nombre del jugador");
		return EXIT_FAILURE;
	}

	// Recibo la estructura del jugador registrado.
	r = recv(sockfd, buffer, sizeof(struct MensajeNIPC), 0);

	memcpy(&jugador, buffer + sizeof(TIPO_MENSAJE) + sizeof(int),
			sizeof(struct Jugador));

	printf("Se ha registrado en el servidor como el jugador %s.\n",
			jugador.nombre);

	if (mostrar_lista() == -1) {
		return EXIT_FAILURE;
	}

	desconectar();

	liberar_recursos();
	return EXIT_SUCCESS;
}
Пример #4
0
int mostrar_lista() {

	int s, r;
	char buffer[MAXBUF];

	bzero(buffer, MAXBUF);

	// Pido la lista de jugadores
	struct MensajeNIPC mensajeLista;
	mensajeLista.tipo = Lista_Jugadores;

	s = send(sockfd, &mensajeLista, sizeof(struct MensajeNIPC), 0);

	if (s == -1) {
		perror("Error al enviar el mensaje.\n");
		return -1;
	}

	// Recibo lista de jugadores
	r = recv(sockfd, buffer, sizeof(struct MensajeNIPC), 0);

	TIPO_MENSAJE tipo;

	memcpy(&tipo, buffer, sizeof(TIPO_MENSAJE));

	int payloadLength;

	memcpy(&payloadLength, buffer + sizeof(TIPO_MENSAJE), sizeof(int));

	// Valido que la lista no este vacia, si esta vacia lo pongo a esperar
	// Si la lista esta vacia el fd del primer jugador va a ser 0
	if (payloadLength == 0) {

		printf("No hay jugadores disponibles en este momento.\n");
		esperarPartida();

	} else {

		int i = 0;

		char messageBuffer[MAXBUF];

		memcpy(jugadoresDisponibles,
				buffer + sizeof(TIPO_MENSAJE) + sizeof(int), payloadLength);

		strcat(messageBuffer, "Lista de jugadores disponibles:\n\n");

		while (jugadoresDisponibles[i].clientfd != 0) {

			char num[5];
			sprintf(num, "%d", i + 1);
			strcat(messageBuffer, num);
			strcat(messageBuffer, ". ");
			strcat(messageBuffer, jugadoresDisponibles[i].nombre);
			strcat(messageBuffer, "(");
			strcat(messageBuffer, jugadoresDisponibles[i].ip);
			strcat(messageBuffer, ")\n");

			i++;
		}

		jugadoresDisponiblesCont = i;

		printf("%s\n", messageBuffer);

		if (elegirJugador() == -1) {
			perror("Error al elegir jugador.\n");
			liberar_recursos();
			return -1;
		}

	}

	return 0;
}