Hola gracias por ver esta segunda parte de mi tutorial espero les haya gustado el anterior, en esta parte vamos a hacer que el cliente de dofus mande unos paquetes los cuales van a ser usados para el inicio de sesion.
Habiamos quedando en que nuestro cliente al conectarse no salia un mensaje en el emulador que decia "se ha conectado un nuevo cliente"
Ahora debemos de responderle al cliente de dofus, para que este continue con su proceso de inicio de sesion
Debemos de responder con un saludo un paquey que dara inicio a todo
Saludo:
"HC"
Para esto nos vamos a nuestra clase ServidorLogin.java
Buscamos el siguiente metodo :
Ahora que hemos encontrado este metodo vemos que en los parentesis tiene un argumento de tipo IoSession llamado arg0, en este argumento se guarda la sesion osea que si queremos ejecutar alguna accion o proceso debe de ser con ese arg0 ya que ahi en si, se esta guardado nuestro usuario que se conecto
La forma mas facil y sencilla que usaremos por el momento sera usando el metodo write
para esto escribimos el siguiente codigo abajo del mensaje
arg0.write("HC");
Con esto le enviamos un paquete al cliente como respuesta
y el cliente nos volvera a responder con 4 paquetes los cuales vamos a ver en las siguientes partes
Entonces estos 4 paquetes debemos recibirlos, pero como?
Primero debemos de crear una clase cliente que va a ser nuestro usuario, las clases son prototipos de objetos, esto que quiere decir?? si yo creo la clase carro, no estoy creando un objeto carro como tal sino su prototipo, atributos y funciones
como por ejemplo el peso, color, kilometraje o funciones como prender motor, arrancar yfrenar
esto nos sirve para cuando creemos por ejemplo un objeto llamado CarroDeJuan de tipo Carro este va ir con los atributos y funciones que le especificamos en la clase Carro
Despues de esta explicacion nos vamos a nuestra nueva clase Cliente.java
Pondremos las tres siguiente variables
private long _id; //Guardara ID de la sesion
private IoSession _IoSesion; //Guarda el Arg0 el usuario, la sesion
private String _llave; // Key llave de acceso
Ahora que hemos puesto estos atributos(Variables) a nuestro prototipo (clase) de lo que va ser nuestro cliente(usuario) de dofus debemos de crear un constructor para que cuando creemos un nuevo cliente se inicialize con un valor en estas variables
para eso ponemos el siguiente codigo
public Cliente(IoSession ioSesion, String Llave){
this._id = ioSesion.getId();
this._ioSesion = ioSesion;
this._llave = Llave;
}
Listo ahora que ya hemos hecho esto le hemos indicado que cada vez que creemos un nuevo objeto de tipo cliente debe inicializarse con esas dos variables llamas ioSesion y Llave
nos devolvemos a ServidorLogin.java
buscamos el metodo que se ejecuta cada vez que se crea una sesion (sessionCreated)
y arriba de arg0.write("HC");
ponemos
Cliente cliente = new Cliente(arg0, "llaveprueba");
Aqui le indicamos que el primer arg0 es la variable que pusimos en nuestro cliente como _ioSesion
y lo que esta entre comillas es la llave que se guardara en _key que por el momento le pondremos
"llaveprueba"
y se crea el objeto cliente de tipo Cliente como si hubieramos hecho lo mismo en la anterior explicacion del carro le indicamos que le indicamos cual era el color, el peso aca le estamos indicando cual es la sesion y la llave
como no solo vamos a usar un cliente sino varios tenemos que irlos registrando en una variable en un hashmap
lo ponemos en nuestra clase Cliente.java de la siguiente manera
public static Map<Long, Cliente> clientes = new HashMap<Long, Cliente>();
arriba del import ponemos esto
import java.util.HashMap;
import java.util.Map;;
y dentro de nuestro constructor
clientes.put(this._id, this);
Quedaria asi
Una grafica para que entiendan un poco como va funcionando el emulador
ya que hemos registrado nuestro cliente por asi decirlo vamos a recibir sus mensajes nos vamos al metodo
messageReceived
Cliente cliente = Client.clientes.get(arg0.getId());
Creamos una variable de tipo cliente y le decimos que obtenga el cliente con el id del arg0 del hashmap clientes
if (client == null)return;
aqyu su cliente es igual a null no se ejecutara lo de abajo que es
for (String paquete : list.split("\n")){
System.out.println("Paquete recibido --> "+ paquete);
}
Quedaria asi
Ahora abriremos nuestro emulador y iniciamos sesion
aqui le ponemos
cliente.login(paquete);
nos saldra un error le damos al bombillito y crear metodo
le damos click derecho a login y open declaration
Dentro de login ira esto
if (this.estado < 3)this.estado++;
switch (this.estado){
case 0:
case 1:
case 2:
default:
break;
}
Ya que el cliente de dofus envia paquetes al emulador hay que separarlos y procesar cada uno
Tambien debemos crear una variable
private int estado = -1;
abajo de _llave
iniciamos nuestro emulador y entramos al cliente de dofus al iniciar nos tendra que llegar estos paquetes
Eso ha sido todo en esta parte en la proxima parte explicare lo que tendremos que hacer con estos paquetes muchas gracias por ver el tutorial !!
Comentarios
Publicar un comentario