viernes, 29 de noviembre de 2013

Destination Finder == Sistema Distribuido

  • El sitio web Destination Finder, diseñado por la empresa SoftCake Inc. puede ser considerado como un sistema distribuido por lo siguiente: cada "modulo" que integra la pagina web, fue distribuida en diferentes equipos y funciono de manera exitosa, haciendo uso de los protocolos TCP/IP, logramos hacer una distribución de recursos, permitiendo una comunicación estable y eficiente entre todos los equipos, permitiendo el acceso a una sola base de Datos y coordinando el orden de ejecución de las acciones de cada parte, logramos una interfaz simple, comprensible y rápida.
  • Cumpliendo con las siguientes características podemos asegurar que este proyecto si es un sistema distribuido:


    1. Transparencia: la mayoría de los usuarios que usen nuestra plataforma web, percibirán a esta como un solo objeto, y no un "rompecabezas" que esta hecho por partes.
    2. Concurrencia: el sistema esta habilitado para la realización de multiples tareas de procesamiento y fue comprobado por medio del JMeter.
    3. Escalable: fue diseñado de tal manera que pueda seguir siendo desarrollado posteriormente sin necesidad de realizar muchos ajustes para permitir la "expansión" de su funcionalidad.
    4. Fallos independientes: al ser un proyecto integrado por partes, el fallo de un modulo, no podrá afectar el desempeño de los otros.
El sitio web esta disponible en este link "Destination Finder"

domingo, 24 de noviembre de 2013

Cliente V2.0



import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.InetAddress;
import java.net.Socket;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.Timer;
import java.net.URL;
import javax.swing.*;
import javax.sound.sampled.*;
/**
 *
 * @author Eduardo Yair-
 */
public class Cliente extends JLabel implements Juego{
    JFrame frm=new JFrame("Speed Racer GT");
    Socket sokete;
    ArrayList<Enemigo> racerx=new ArrayList<Enemigo>();
    ArrayList<Auto> speedr=new ArrayList<Auto>();
    Timer t;
    ObjectInputStream entradaOBJ;
    ObjectOutputStream objSaliente;
    Image track=new ImageIcon(getClass().getResource("media/fondo.png")).getImage();
    Image autoi=new ImageIcon(getClass().getResource("media/carpot.png")).getImage();
    Image enemyi=new ImageIcon(getClass().getResource("media/enemy.png")).getImage();
    Image enemyj=new ImageIcon(getClass().getResource("media/enemy1.png")).getImage();
    Image enemyk=new ImageIcon(getClass().getResource("media/enemy2.png")).getImage();
    Image enemyl=new ImageIcon(getClass().getResource("media/ship.png")).getImage();

    int pos=0;
    public static void main(String args[]) throws Exception{
        new Cliente();
    }
    public void bkgrndmsk()throws Exception {
        URL url = new URL(  "https://dl.dropboxusercontent.com/u/96424843/hocus.wav");      
        //String strFilename = "media/hocus.wav";
        //File sound=new File(strFilename);
        //InputStream in = ClassLoader.getSystemResourceAsStream("media/hocus.wav");
        //URL urlToClip = this.getClass().getResource("media/hocus.wav");
        Clip clip = AudioSystem.getClip();
        // getAudioInputStream() also accepts a File or InputStream
        AudioInputStream ais = AudioSystem.getAudioInputStream(url);
        clip.open(ais);
        clip.loop(Clip.LOOP_CONTINUOUSLY);
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                JOptionPane.showMessageDialog(null, "La música se terminara cuando acabe el juego");
            }
        });
    }
    public Cliente() throws Exception{
        super();
        bkgrndmsk();
        conectar();
        frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        Dimension pantalla=Toolkit.getDefaultToolkit().getScreenSize();
        frm.setSize(pantalla);
        frm.setUndecorated(true);
        frm.add(this);
        frm.setVisible(true);
        this.setFocusable(true);
        this.addKeyListener(error85);
        setBackground(Color.BLACK);
        t=new Timer(5,updater);
       
        t.start();
    }
    public void dibujarAuto(Auto c,Graphics2D g2d){
        if(!c.perder){
            g2d.drawImage(autoi,c.posx,c.posy,c.ancho,c.alto , null);
        }
    }
     public void paint(Graphics g){
        super.paint(g);
        Graphics2D g2d=(Graphics2D)g;
        g2d.setColor(Color.white);
        g2d.drawImage(track, 0, pos,frm.getWidth() ,frm.getHeight() , null);
        g2d.drawImage(track, 0, 0-frm.getHeight()+pos,frm.getWidth() , frm.getHeight() , null);
        for(Auto a:speedr){
            dibujarAuto(a,g2d);
        }
        dibujarEnemigos(racerx,g2d);
    }
    public void dibujarEnemigos(ArrayList<Enemigo> enem,Graphics2D g2d){
        for(int i=0;i<enem.size();i++){
            int r=i%3;
            if(r==0){
                g2d.drawImage(enemyi,enem.get(i).posx,enem.get(i).posy,enem.get(i).ancho,enem.get(i).alto , null);
            }else if(r==1){
                g2d.drawImage(enemyj,enem.get(i).posx,enem.get(i).posy,enem.get(i).ancho,enem.get(i).alto , null);
            }else if(Math.random()*2<=4){
                g2d.drawImage(enemyk,enem.get(i).posx,enem.get(i).posy,enem.get(i).ancho,enem.get(i).alto , null);
            }else if(Math.random()*2>=4){
                g2d.drawImage(enemyl,enem.get(i).posx,enem.get(i).posy,enem.get(i).ancho,enem.get(i).alto , null);}
        }
    }
    public void recibirEnemigos(){
        try{
            //s.setSoTimeout(5);
            Mensaje mensaje=(Mensaje)entradaOBJ.readObject();
           
            racerx=mensaje.enemigos;
            speedr=mensaje.autos;
            pos=mensaje.fondo;
            //imprimirEnemigos();
        }catch(IOException e ){
            //e.printStackTrace();
            //System.exit(0);
        }
        catch(Exception e ){
            //e.printStackTrace();
        }
    }
    @Override
    public void conectar() {
        try{
            //System.out.println("Estableciendo Conexión");
            InetAddress ad=InetAddress.getByName(JOptionPane.showInputDialog("IP (Server): "));
            sokete=new Socket(ad,Integer.parseInt(JOptionPane.showInputDialog("Puerto: ")));
            entradaOBJ=new ObjectInputStream(sokete.getInputStream());
            objSaliente=new ObjectOutputStream(sokete.getOutputStream());
        }catch(Exception e){
            //e.printStackTrace();
        }
    }
    public void mover(Movimiento m) {
        try{
            objSaliente.writeObject(m);
            //ois.readInt();
            //Thread.sleep(200);
            objSaliente.flush();
            //sokete.getOutputStream().flush();
            //ooo.reset();
           
        }catch(Exception e){
            //e.printStackTrace();
        }
    }

    @Override
    public void actualizar() {
            recibirEnemigos();
            repaint();
    }

    @Override
    public void ganar() {
    }

    @Override
    public void perder() {
        throw new UnsupportedOperationException("Not supported yet.");
    }
    ActionListener updater=new ActionListener(){
        public void actionPerformed(ActionEvent ae) {
            actualizar();
        }
       
    };
    KeyListener error85=new KeyListener(){
        public void keyTyped(KeyEvent ke) {
        }
        public void keyPressed(KeyEvent ke) {
            if(ke.getKeyCode()==KeyEvent.VK_ESCAPE){
                System.exit(0);
            }
            Movimiento m=new Movimiento(ke,true);
            mover(m);
        }
        public void keyReleased(KeyEvent ke) {
            Movimiento m=new Movimiento(ke,false);
            mover(m);
        }
    };
}