package Comunicacion;
import java.util.ArrayList;
import java.util.List;
import java.util.Observable;
import java.util.Observer;
import Modelo.FachadaModelo;
import Comunicacion.RecibirCliente;
public class Protocolo implements Observer
{
public static final int CREAR_OBJETO = 1;
public static final int LANZAR = 2;
public static final int MOVER_OBJETO = 3;
public static final int VALORES_MAXIMOS = 4;
public static final int INFORMAR_CREACION_OBJETO_VISTA = 5;
public static final int INGRESAR_BARRA = 6;
public static final int RETORNO_CREAR_OBJETO = 7;
public static final int NO_SE_PUEDE = 8;
public static final int ACTUALIZAR = 9;
public static final int INICIAR_ENVIO_SERVIDOR = 10;
private RecibirCliente conexion;
private List<Objeto> objSockets;
private FachadaModelo fm;
public Protocolo()
{
objSockets = new ArrayList<Objeto>();
this.conexion = new RecibirCliente(this);
}
public void iniciarServidorEscucha()
{
this.conexion.iniciarEscucha();
}
public void informarCreacionObjVista(double posX, double posY, List<Double> parametros, int idObjeto, int tipoObjeto)
{
List<Object> parametrosEnviar = new ArrayList<Object>();
parametrosEnviar.add(posX);
parametrosEnviar.add(posY);
parametrosEnviar.add(parametros);
parametrosEnviar.add(idObjeto);
parametrosEnviar.add(tipoObjeto);
Objeto aEnviar = new Objeto(parametrosEnviar, this.INFORMAR_CREACION_OBJETO_VISTA);
aEnviar.setRetorna(false);
this.conexion.enviarFlujoNoRetorno(aEnviar);
}
public void noSePuede()
{
Objeto aEnviar = new Objeto(null, this.NO_SE_PUEDE);
aEnviar.setRetorna(false);
this.conexion.enviarFlujoNoRetorno(aEnviar);
}
public void actualizar(double posX,double posY, double idObjeto)
{
List<Object> parametrosEnviar = new ArrayList<Object>();
parametrosEnviar.add(posX);
parametrosEnviar.add(posY);
parametrosEnviar.add(idObjeto);
Objeto aEnviar = new Objeto(parametrosEnviar, this.ACTUALIZAR);
aEnviar.setRetorna(false);
this.conexion.enviarFlujoNoRetorno(aEnviar);
}
public void recibirFlujo(Objeto c) {
List<Object> retorno = new ArrayList<Object>();
retorno = c.getParametros();
if(c.getTipoInvocacion() == this.CREAR_OBJETO)
{
this.fm.crearObjeto(Integer.parseInt(retorno.get(0).toString()),Double.parseDouble(retorno.get(1).toString()),Double.parseDouble(retorno.get(2).toString()), (List<Object>)retorno.get(3));
}
else if(c.getTipoInvocacion() == this.VALORES_MAXIMOS)
{
System.out.println("Me enviaron los valores del Canvas");
System.out.println("Valores " + Double.parseDouble(retorno.get(0).toString()) + " " + Double.parseDouble(retorno.get(1).toString()));
this.fm = new FachadaModelo(this);
this.fm.valoresMaximosCanvas(Double.parseDouble(retorno.get(0).toString()), Double.parseDouble(retorno.get(1).toString()));
}
else if(c.getTipoInvocacion() == this.LANZAR)
{
System.out.println("id: " + retorno.get(0).toString() + " Velocidad: " + retorno.get(1).toString() + " Angulo: " + retorno.get(2).toString());
this.fm.lanzar(Integer.parseInt(retorno.get(0).toString()), Double.parseDouble(retorno.get(1).toString()),Double.parseDouble(retorno.get(2).toString()));
}
else if(c.getTipoInvocacion() == this.MOVER_OBJETO)
{
this.fm.moverObjeto(Integer.parseInt(retorno.get(0).toString()), Double.parseDouble(retorno.get(1).toString()),Double.parseDouble(retorno.get(2).toString()));
}else if(c.getTipoInvocacion() == this.INFORMAR_CREACION_OBJETO_VISTA)
{
this.fm.informarCreacionObjVista(Integer.parseInt(retorno.get(0).toString()));
}
else if(c.getTipoInvocacion()==this.INICIAR_ENVIO_SERVIDOR)
{
this.conexion.abrirPuertoCliente(this.conexion.getPuertoLlamo());
this.fm.ingresarBarra();
System.out.println("Ya creeee la Barra!!!!!!!!!!!!");
}
}
public void update(Observable arg0, Object arg1) {
// TODO Auto-generated method stub
}
public void setFm(FachadaModelo fm) {
this.fm = fm;
}
public RecibirCliente getConexion() {
return conexion;
}
}