Hola chicos buenos dias, no se si servira de algo pero aqui os dejo ampliacion de la informacion de ayer sobre las trazas que me ha llegado por mail :
NOTA: En lo que os voy a poner a continuación se entiende: un caracter entre comilla simple significa eso, un caracter, y el valor es el del caracter indicado, así ' ' es lo mismo que $20, o 32, o espacio.
NOTA: Las tramas las pondré con una 'regla' debajo p'ara que veáis como es y que longitud tiene.
NOTA: ... (tres puntos) significa, un nº indeterminado de caracteres (en órden lógico) según la trama que se está indicando.
0.- IOCP es un protocolo en modo texto, legible, no codificado.
1.- IOCP fué diseñado para UDP, NO TCP, pero IOCPServer utiliza TCP. (Véase punto 12)
2.- Está basado en una arquitectura cliente-servidor pensando para que los clientes 'se registren' y el servidor pueda saber así que quiere cada uno, de manera que cuando algo cambia se notifica a los clientes el cambio, sin que estos pregunten.
3.- Las variables, son de tipo entero y la necesidad de tener decimales, se resuelve multiplicando el dato antes de ser transmitido y dividiendo tras recibirlo (en el cliente)
4.- Todos los mensajes de IOCP terminan con dos caracters, el 13 y el 10. $0D y $0A, es decir la secuencia CR+LF de final de línea. En el resto del mail lo indicaré como CL
5.- Todos los tipos de registro de IOCP comienzan con la secuencia "Arn."
Los primeros 4 octetos (bytes) de cada registro son 'A','r','n', '.'
Arn.
01234567890
1
6.- El primer mensaje se produce tras la conexión del cliente al servidor y conciste en un mensaje en el que el serviidor informa alcliente 'con quien se ha conectado' para que el cliente actúe en consecuencia, este mensaje es Arn.TipoSer:xxxxxx:CL donde xxxxxxx es el nombre del servidor.
Pj: Para el IOCPServer del FS cuando un cliente se conecta, recibe la secuencia,
Arn.TipoSer:FSn:CL
012345678901234567890
1 2
donde la 'n' debe ser interpretada como un dígito que indica la versión del FS, así el IOCPServer 1.6 puede entregar, 7,8 y 9 en esa posición para los FS98, FS2000 y FS2004 respectivamente.
Para FSX se entregará una A. Es decir: "Arn.TipoSer:FSA:CL"
7.- Tras haber a que servidor se ha conetado, el cliente debe registrarse, iniciando la comunicación con el mediante el mensaje: Arn.Inicio:var0:var1:...:varn:CL donde var0, var1 a varn representan nº de variables de las que el cliente quiere estar informado si cambian.
Arn.Inicio:123:1:1345:...:CL
0123456789012345678901234567890
1 2 3
8.- Cuando alguno de los extremos, cliente o servidor, desean finalizar la comunicación y notificar al otro extremo el "cierre" se enviará desdeel extremo que se cierra hacia el otro "Arn.Fin:CL"
Arn.Fin:CL
01234567890
1
NOTA: El IOCPServer al enviar un Arn.Fin:CL, lo hace a todos los clientes que están conectados y "espera" un cierto tiempo, descartando los posible "Arn.Fin:CL" que emiten al cerrarse los clientes.
9.- (Solo IOCPServer) El IOCPServer entiende y responde a un mensaje especial denominado Arn.Preg: que indica al servidor que el cliente desea saber "ahora" un valor de una/s variable/s, aunque lleve/n mucho tiempo sin cambiar. Así cualquier cliente que se vaya a conectar a un IOCPServer puede implementar la petición de un dato, aún cuando no lo tenga registrado, y preguntar al servidor por el/los valores que desee. el formato es: "Arn.Preg:var0:var1:...:varn:CL
Arn.Preg:100:123:1567:CL
0123456789012345678901234567890
1 2 3
10.- Tras recibir un mensaje de inicio, o tras recibir un mensaje Arn.Preg o cada ve que cambia una variable que un cliente tenga registrada, el servidor deberá generar un mensaje del tipo:
"Arn.Resp:var0=val0:var1=val1:...:varn=valn:CL" donde var0, var1, a varn representa el numero de la variable registra (o preguntada) y val0, val1 a valn, representa su valor en el servidor.
Arn.Resp:12=123:145=23423423:139=0:CL
01234567890123456789012345678901234567890
1 2 3 4
11.- Cuando un cliente desee informar al servidor que debe cambiar el valor de alguna variable, enviará al servidor el mismo mensaje que en parrafo anterior, el "Arn.Resp:var0=val0:var1=val1:...:varn=valn:CL" donde var0, var1, a varn representa el numero de la variable registra y val0, val1 a valn, representa su valor para que el servidor la cambie.
NOTA:En IOCPServer responde con un mensaje, que en condiciones normales, es idéntico al recibido, de manera que el cliente tiene constancia de que el cambio se ha producido, pero si alguno de los valores enviados por el cliente al servidor no son válidos o no pueden ser 'inyectados' en el simulador en ese momento la respuesta del server irá con el valor que se ha quedado en la variable.
NOTA: A veces, el simulador, acepta la varible, pero a posteriori, normalmente unos 150ms, la variable vualve a cambiar de valor y se queda como estaba, algo que el server notificará al cliente, es decir, el cliente en ese caso, recibirá primero la confirmación del cambio y algunos ms después recibirá el valor que se ha quedado en la variable.
12.- IOCPServer NO emite "Arn.Vivo:CL" responde con un mensaje idéntico si lo recibe, pero no los emite. El ontrol de estado de los cliente se hace mediante TCP.
13.- (Solo IOCPServer) Existe otro mensaje, al que el IOCPServer puede responder, es "Arn.Key:nnn:CL" y corresponde a la petición de un cliente para que el FS "dispare" alguno de sus eventos. Esto no puede ser controlado hoy por SIOC, pero espero que pueda hacerlo, de esta manera el IOCPServer respone por ejemplo al EVENT_QUIT, es decir cierra y sale del FS (Sin preguntar) son solo recibir el código de ese comando. La lista de los valores se puede bajar de la web del IOCPServer.
Arn.Key:nnnn:CL
012345678901234567890
1 2
donde nnn, es un evento a disparar, puede ser una tecla, o muchas otras cosas....
A ver si se consigue algo
Saluditos para todos
Gracias Skorp, Multipass y Skorp por vuestro trabajo y esfuerzo