Crear emulador Dofus 1.29 parte 2

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