Primer intento en C para seguimiento de coordenadas

warning: Parameter 2 to gmap_gmap() expected to be a reference, value given in /home/flightgearmissions/flightgearmissions.com/includes/module.inc on line 483.
Imagen de admin
Bueno, voy a poner aquí el programa que hice (como prueba) para "conectar" con flightgear y hacer así un seguimiento de éste posteriormente (en esta misma web, aún sin terminar). Flightgear nos deja un puerto abierto para telnet si se arranca de esta forma:
fgfs --httpd=5400 --props=5401
Así que la base de este proyecto, es ésa, la "posible" comunicación con el simulador, ya que por fortuna, es de código libre y muy abierto, gracias equipo de flightgear! Y paso a detallar sus parámetros: --httpd=5400 Nos permitirá ver toda la jerarquía de objetos que tiene el motor y que pueden ser modificados externamente --props=5401 Hace lo mismo pero desde telnet (cliente muy extendido de comunicaciones) De esta forma, arrancamos el juego con ésos puertos abiertos. Ahora tenía que conectar para probar, lo hice por telnet, directamente, a mano y sencillamente no hubo problemas. Después eché una mirada vía web y es muy sencillo de entender. Así que lo probáis y entonces veréis de que hablo... Para conectar con telnet sería:
telnet localhost 5401
Mientras que por web, sería navegando esta dirección:
http://localhost:5400
La cosa es por tanto, hacer un automatismo de esto, un programa:
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h>
 
#define SERVER_PORT 5401
#define HOST "localhost"
#define MAX_MSG 100
 
int main (int argc, char *argv[])
{
 
	int sd, rc, i;
	char *message;
	struct sockaddr_in localAddr, servAddr;
	struct hostent *h;
 
	h = gethostbyname(HOST);
	if(h == NULL)
	{
		printf("%s: unknown host '%s'\n", argv[0], HOST);
		return 1;
	}
 
	servAddr.sin_family = h->h_addrtype;
	memcpy((char *) &servAddr.sin_addr.s_addr, h->h_addr_list[0], h->h_length);
	servAddr.sin_port = htons(SERVER_PORT);
 
	/* create socket */
	sd = socket(AF_INET, SOCK_STREAM, 0);
	if(sd < 0)
	{
		perror("cannot open socket ");
		return 1;
	}
 
	/* bind any port number */
	localAddr.sin_family = AF_INET;
	localAddr.sin_addr.s_addr = htonl(INADDR_ANY);
	localAddr.sin_port = htons(0);
 
	rc = bind(sd, (struct sockaddr *) &localAddr, sizeof(localAddr));
	if(rc < 0)
	{
		printf("%s: cannot bind port TCP %u\n", argv[0], SERVER_PORT);
		perror("error ");
		return 1;
	}
 
	/* connect to server */
	rc = connect(sd, (struct sockaddr *) &servAddr, sizeof(servAddr));
	if(rc < 0)
	{
		perror("cannot connect ");
		return 1;
	}
 
	message = "cd /rendering/scene/ambient\r\n";
	rc = send(sd, message, strlen(message) + 1, 0);
	printf("%d", rc);
	if(rc < 0)
	{
		perror("cannot send data ");
		close(sd);
		return 1;
	}
	printf("%s: %s\n", argv[0], message);
 
	message = "set red 20\n";
	do {
		sleep(1);
		rc = send(sd, message, strlen(message) + 1, 0);
		printf("%d", rc);
		if(rc < 0)
		{
			perror("cannot send data ");
			close(sd);
			return 1;
		}
		printf("%s: %s\n", argv[0], message);
	} while(1);
 
	return 0;
 
}
Lo de arriba, es un programa que conectará con flightgear mediante telnet y se meterá en un bucle para no salir de él, en el cual, cada [1 medida de tiempo de C] (ahora no recuerdo si eran segundos, milisegundos o que se yo), enviará la cadena de texto "set red 20\n" a flightgear, pudiendo ver sus efectos durante el juego. Se compila así:
gcc -o missionsl1 missionsl1.c
Siendo "missionsl1.c" el nombre del fichero de texto que contiene el código y "missionsl1" el fichero binario y ejecutable que nos dará gcc. Probado esto ya tenía suficiente para entender que inyectando modificaciones al motor, se pueden hacer cosas como provocar un viento "simulado" de determinadas características, leer coordenadas y hacer por lo tanto, un seguimiento, etc. Ahora tenía que hacer que fuera sencillo realizar dichas modificaciones durante un vuelo y que quedaran guardadas en una escala de tiempo o eventos para una posterior repetición. Necesitaba, una simple base de datos. Llegué a pensar, debido a mi trabajo actual como programador de webs y anteriormente como programador de aplicaciones, en la útil y sencilla capacidad de Drupal para tales fines. Sus contenidos son fácilmente adaptables a casi cualquier circunstancia y entonces porqué no, para guardar los datos de lo que llamo "misiones", misiones enteras y funcionales para flightgear. Manos a la obra, monté esta web y ahora sigo en la fase de diseñar el almacén de las misiones de forma solida y eficiente para después poner en marcha el motor de PHP (que leerá y modificará el flightgear según datos de misión previamente guardados, las misiones), que publicaré en otra entrada y sigue ahora en fase beta y así seguirá hasta terminar el almacén. Aunque os aviso que el motor de PHP es tan precario que únicamente se limita a leer las coordenadas del avión hasta que entra en un punto predefinido a mano y provoca un evento tan simple como un mensaje de texto desde el propio motor, en la consola, algo que lógicamente, no puede ser usado aún. Así que paciencia mientras termino, sé que voy lento, pero mi vida no se limita solo a esto ;)
Imagen de dark

Flightgear con java hacer conexiones url con java y hacer report

Quiero conectar url con java en flightgear usar el httpd que es localhost:5500, para mediante java acceder a flightgear y poder realizar un reporte de vuelo reporte de los rotores ,aceleracion, latitud altitud, estabilidad, timon, leerlo mediante un leguaje de programacion de preferencia con java o con otro, si es posible poder manipular los controles mediante java y conectar a la salida que flightgear da con el comando --httpd=5500, gracias...

Imagen de admin

Bueno, en el ejemplo tienes

Bueno, en el ejemplo tienes como se hace... puedes conectar con telnet (supongo que java tiene soporte para eso, o algo parecido) y entonces, navega normalmente y tal...