Te voy a explicar masomenos como se envia un paquete desde el servidor al cliente( Para enviar del cliente al servidor es practicamente lo mismo, tan solo que en vez de escribir un Server_Packet_ID escribis el Client_Packet_ID
Empesamos:
Es un poco mas largo pero no es mas complicado.
Primero:
Server
Declaras el ServerPacketID
Vas a ver que hay un Enum llamado ServerPacketId
Al Final de dicho enum tenes que agregar tu Paquete. Ahora usaremos el paquete "Ejemplo"
Entonces:
Vamos al ServerPacketId y le Agregamos en una nueva linea:
Ejemplo 'Identificador del Paquete
Luego vas a tener que "enviar" lo que queres al cliente.
Para esto se crea un Write (Podes usar write como no, es solo el nombre del sub) + Nombre del Indetificador
Entonces seria:
WriteEjemplo
En el write lo que tenes que hacer no es mucho, veras que 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
Calma! No te apresures aca te lo explico:
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.
Es sumamente sensillo.
Tenes que saber que es lo que estas enviando porque va a emplear un metodo para numero y otro para texto. A la vez tenes que saber si enviar numero, que valores envias, no podes poner WriteByte(123123123123) por que daria error, ya que la variable Byte abarca desde el 0 al 255
Pegate una mirada al ClsByteQueue, ahi vas a ver que para X dato vas a hacer un WRiteX, y tambien cuando lees, en vez de WRite usas ReadX
Sigamos:
Ya con esto armamos el "ENVIO" del paquete, pero ahora nos falta que el cliente haga algo con eso, porque sino no sirve.
Entonces ahora vamos al cliente:
Del mismo modo que en el servidor declaramos el ServerPacketID justo en la misma posicion que lo pusiste en el servidor.
Luego de esto tenes que agregar al select Case ServerPacketId que en todos los casos puede aparecer el tuyo, entonces hacemos esto:
Al select case le agregamos:
Case serverpacketi.Ejemplo
A continuacion en una nueva linea le agregas:
call HandleEjemplo (Repito es handle como pepito, solo se pone para encontrar todas las lecturas y escrituras juntas )
Que es lo 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
-
Bien.
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.
Ahi ya tenes leidos los valores enviados.
Con eso ya podes hacer lo que queres.
Ejemplo
Despues de esas lineas agregas:
Call RobarYMatar(Nombre,Oro,Vida)
(Cualquier cosa puse ahi jaja)
Pero es un ejemplo.
Para hacer un envio del cliente al servidor es lo mismo nomas que partis desde el cliente y que en vez de ser ServerPacketid es ClientPacketId.
Ademas en el servidor tenes que modificar la constante Client_Packet_ID, a esa le incrementas en 1 el valor(dependiendo de la cantidad de paquetes)
Bueno, creo que quedo bien explicado. Espero que entiendas :