Primero vamos a ver como se envia un Comando del Servidor hacia el Cliente. Es un poco mas largo que en verciones anteriores, pero no es mas complicado.
Lo primero que hacemos:
Declaramos el ServerPacketID
Existe un Enum llamado ServerPacketID
Aqui se guardan los identificadores de los paquetes.
Entonces lo que vamos a hacer es crear un nuevo identificador:
Este lo Agregamos al final del Enum.
Ahora llegamos al punto de tener que usar el identificador, ya sea para enviar mas datos o para accionar algo en el cliente.
Entonces lo que hacemos es crear el Sub Correspondiente que enviara el dato.
Para esto se crea un Write (Se utiliza el Write para reconocer facilmente la escritura de datos. Tambien se puede usar el que uno quiera) + Nombre del Indetificador
Entonces nos quedaria algo como:
WritePrueba
Esto es un Sub en donde se graban los datos a enviar.
Lo que hay que hacer es bastante sensillo:
- On Error GoTo Errhandler
- Call UserList(UserIndex).outgoingData.WriteByte(ServerPacketID.Ejemplo)
- Call UserList(UserIndex).outgoingData.WriteLong(123123123)
- Call UserList(UserIndex).outgoingData.WriteInteger(32000)
- Call UserList(UserIndex).outgoingData.WriteASCIIString("Yo tengo un sapo que se llama pepe")
- Exit Sub
- Errhandler:
- If Err.Number = UserList(UserIndex).outgoingData.NotEnoughSpaceErrCode Then
- Call FlushBuffer(UserIndex)
- Resume
- End If
Explicacion:
- On Error GoTo Errhandler
Aca le estamos diciendo que si hay algun error valla al manejador de errores.
- Call UserList(UserIndex).outgoingData.WriteByte(ServerPacketID.Ejemplo)
Aca estamos enviandole al cliente el serverpacketid. Con esto el cliente sabra donde posicionarse para hacer la accion.
- Call UserList(UserIndex).outgoingData.WriteLong(123123123)
- Call UserList(UserIndex).outgoingData.WriteInteger(32000)
- Call UserList(UserIndex).outgoingData.WriteASCIIString("Yo tengo un sapo que se llama pepe")
Aca le estamos enviando los datos al cliente.
Lo unico a tener en cuenta es que tienen que saber que datos se estan enviado para poder grabar con su correspondiente valor. Por ejemplo un WriteByte no va a enviar un Entero Largo.
Si tienen dudas en cual usar miren la clase ClsByteQueue
Ya con esto armamos el "ENVIO" del paquete, pero si el cliente no se entera para que le sirven estos datos no sirve para nada..
Entonces ahora vamos al cliente:
Del mismo modo que en el servidor declaramos el ServerPacketID justo en la misma posicion que lo Pusieron en el servidor(Al final).
Ahora llega la parte en la que el cliente tiene que saber de que paquete se esta hablando:
Entonces buscamos el Select Case ServerPacketID
Y le Agregamos el caso correspondiente:
Case serverpacketid.Prueba
A continuacion en una nueva linea debajo del case le agregamos:
call HandlePrueba (Puede ser Handle como pepito. )
Pero.. QUe tiene el handle?
No es mas ni menos que la lectura de los valores que le envio el servidor:
- Public Sub HandleEjemplo()
- Call incomingData.ReadByte
- Oro= incomingData.ReadLong()
- Vida=incomingData.ReadInteger()
- Nombre=incomingData.ReadASCIIString()
- End sub
Lo que estamos haciendo aca es lo siguiente:
- Call incomingData.ReadByte
Ahi removemos el ServerPacketID que le enviamos para identificar al paquete.
- Oro= incomingData.ReadLong()
Aca estamos leyendo el primer valor que mandamos. Como mandamos un Long leemos un Long
- Vida=incomingData.ReadInteger()
Aca estamos leyendo el segundo valor que le enviamos. Como era un Integer, leemos un integer.
- Nombre=incomingData.ReadASCIIString()
Aqui Leemos el ultimo valor enviado, y como era Texto lo leemos como tal.
Ahora ya le asignamos los valores de los datos enviados a variables propias.
Y ahora solo queda hacer lo que harian normalmente:
Ejemplo
Despues de esas lineas agregas:
- Call RobarYMatar(Nombre,Oro,Vida)
Bueno Ahi finaliza la Guia para Enviar un Comando del Servidor al Cliente.
Cuando tenga tiempo le agrego la otra parte. Es igual solo cambian dos lineas como mucho pero para despistados lo pongo luego.
Cualquier Sugerencia y/o error me avisan por favor.
PARTE 2: protocolo_binario_parte_2_tiNs.html
Por mAthi






290 





![Destructor de Mentes [6] Destructor de Mentes [6]](./images/ranks/Rango18.gif)

![Oraculo [4] Oraculo [4]](./images/ranks/Rango28.gif)

![Oraculo [2] Oraculo [2]](./images/ranks/Rango26.gif)


![Oraculo [1] Oraculo [1]](./images/ranks/Rango25.gif)
![Oraculo [5] Oraculo [5]](./images/ranks/Rango29.gif)


![Destructor de Mentes [8] Destructor de Mentes [8]](./images/ranks/Rango20.gif)
