Filtro CPL Polarizado ventajas

Cliente y Servidor RPC en JAVA - Dona RPC con OpenGL 3D

Servidor y Cliente RPC - Dona Torus RPC en 3D OpenGL
Dona RPC Control Manual y Automático
👽👽👽👽👽👽👽👽👽👽
💓💓💓💓


Les comparto un proyecto hecho en Java usando librerias OpenGL y XMLRPC para lograr una comunicación RPC con el cliente y servidor.

El objetivo es controlar el giro de la Dona:
Control manual
  - Iniciar Giro
  - Detener Giro
  - Aumentar velocidad del giro
  - Disminuir la velocidad del giro

Control automático
 - Ingresar ID de la maquina donde se ejecutara
 - Ingresar el tiempo en mili segundos que tardara ejecutándose
 - Se debe registrar el tiempo de inicio, el tiempo de ejecución, y el numero de fragmentos de la tarea.


En la parte del servidor RPC y donde se encuentra el dibujo en 3D ahí se inicia el Servidor: En la clase Main.java
//Iván Luis Jiménez
try {
            WebServer server = new WebServer(8080);
            
            server.addHandler("Maquina1", canvas);

            server.start();

            frame.setTitle("Servidor Dona RPC");
            frame.setSize(p1.getWidth() + p2.getWidth(), p1.getHeight());
            frame.setVisible(true);

            animator.start();
        } catch (Exception e) {
        }
En la clase MiLienzo.java se encuentran los metodos que el administrador utilizara para controlar la dona.
Timer timer = new Timer(tiempo, new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            giraMas();
        }
    });

    public void setan(double angulo) {
        anguloz += angulo;
    }


    public void giraMas() {
        setan(5);
        this.display();
    }

    int tiempo2 = 50;
    public int aumentar(int i) {
        System.out.println(""+tiempo);
        tiempo -= 10;
        if (tiempo <= 50) {
            tiempo2 -= 5;
            timer.setDelay(tiempo2);
            if (tiempo2 <= 1) {
                timer.setDelay(1);
                tiempo = 0;
            }
        } else {
            timer.setDelay(tiempo);
        }
        this.display();
        return 0;
    }

    public int disminuir(int i) {
        System.out.println(""+tiempo);
        if(tiempo < 0){
            tiempo = 0;
        }
        tiempo += 10;
        tiempo2 =50;
        timer.setDelay(tiempo);

        this.display();
        return 0;
    }

    public int iniciar(int i) {
        if(!timer.isRunning()){
            timer.start();
        }
        
        return 1;
    }

    public int terminar(int i) {
        if(timer.isRunning()){
            timer.stop();
        }
        
        return 1;
    }
Esto fue la parte del Servidor. Ahora en la parte del Administrador, la parte mas importante es la siguiente: Se encuentra las acciones para invocar a los procedimientos remotos; Control Manual
public void iniciar() {

        try {
            XmlRpcClient cliente = new XmlRpcClient("http://localhost:8080/");
            Object result = cliente.execute("Maquina1.iniciar", dat);
            int client = (Integer) result;
            salida.setText(1 + mi);
        } catch (Exception e) {
            System.out.println("" + e.getMessage());
        }
    }

public void aumentar() {

        try {
            XmlRpcClient cliente = new XmlRpcClient("http://localhost:8080/");
            Object result = cliente.execute("Maquina1.aumentar", dat);
            int client = (Integer) result;
        } catch (Exception e) {
            System.out.println("" + e.getMessage());
        }
    }

public void disminuir() {

        try {
            XmlRpcClient cliente = new XmlRpcClient("http://localhost:8080/");
            Object result = cliente.execute("Maquina1.disminuir", dat);
            int client = (Integer) result;
        } catch (Exception e) {
            System.out.println("" + e.getMessage());
        }
    }

public void terminar() {

        try {
            XmlRpcClient cliente = new XmlRpcClient("http://localhost:8080/");
            Object result = cliente.execute("Maquina1.terminar", dat);
            int client = (Integer) result;
            salida.setText(1 + mt);
        } catch (Exception e) {
        }
    }

Para el control automático en la parte del administrador se tubo que programar una accion que se ejecutase en un tiempo determinado. Ese tiempo lo daría el administrador en milisegundos.
if(!id.getText().isEmpty() && !tiempo.getText().isEmpty()){
        a = new Tarea(Integer.parseInt(id.getText()), Long.parseLong(tiempo.getText()), modeloTabla);
        a.start();
       }
Cuando la tarea se inicia se manda a invocar el procedimiento remoto de iniciar el giro en la maquina indicada. Despues se deja programado un proceso para que se ejecute en el tiempo que el administrador indico.
public void run() {
            
            ob.iniciarP(id);
            String hora = obtner_hora();
            int frag = getAllStackTraces().size();
            timer.schedule(new TimerTask() {
                @Override
                public void run() {
                    
                    ob.terminarP(id);
                    ob.limpiartabla();
                    ob.actualizar_tabla(id, hora, tiempo, frag, modeloTabla);
                    
                }
            }, tiempo);
            
            this.stop();
        }

La parte del código que presente es lo mas esencial para manipular la comunicación y el control de la dona.

Cualquier duda, comentario o sugerencia pueden dejar su comentario en la parte de abajo, o escribirme a mi correo y  Facebook.

Link de la explicación:


Link de descarga del proyecto completo:

Descargar
http://raboninco.com/GlqC
Espero les sea de ayuda.

Creado por Iván Luis Jiménez.
Ivanovich.

Comentarios

Publicar un comentario