Package app

Source Code of app.SerLiquidoCore

package app;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.ArrayList;

import javax.swing.JFrame;

import netP5.NetAddress;

import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;
import org.json.JSONException;
import org.json.JSONObject;
import org.smslib.OutboundMessage;

import oscP5.OscMessage;
import oscP5.OscP5;
import processing.core.PApplet;

import servers.Google;
import servers.ImageSearcher;
import servers.Modem;
import servers.ImageSearchListener;
import servers.ImageSearchClient;
import servers.ModemListener;
import servers.Sql;
import servers.Visitor;
import servers.VisitorListener;
import utils.ConsoleIO;

/**
*
* @author diex
* @version 1.0
*
*
*/
public class SerLiquidoCore implements ModemListener, KeyListener, VisitorListener, Runnable{

  private Logger logger = Logger.getLogger(SerLiquidoCore.class);

  /**
   * el thread sobre el cual corre el core
   *
   */

  private Thread runner;

  /**
   * Ventana de interfase gr�fica
     usada para levantar el teclado y mostrar data
   */

  JFrame frame = new JFrame("SER LIQUIDO CORE");

  /**
   * Modem
   */
  private Modem modem;
  private boolean using_modem = true;


  /**
   * administrador de la base de datos
   */
  private Sql sql;

  /**
   *  visitantes activos
   */
  private ArrayList<Visitor> visitors;


  /**
   * cliente OSC
   */
  private OscP5       oscGateway;
  private int        oscInputPort   = 7601;

  private NetAddress     oscTerminalLocation;
  private NetAddress     oscVisualLocation;

  private int        oscTerminalPort = 7600;
  private int        oscVisualPort  = 8600;



  public static void main (String args[]){
    new SerLiquidoCore()
  }


  /**
   * constructor publico
   */
  public SerLiquidoCore(){

    PropertyConfigurator.configure("./data/logs/logger.properties");

    logger.info("+++++++++++++++++++++++++++++++");
    logger.info("+++++++++++++++++++++++++++++++");
    logger.info("SerLiquidoCore():");


    frame.setFocusable(true);
    frame.requestFocus();
    frame.addKeyListener(this);
    frame.setVisible(true);
    frame.setSize(320, 240);

    // inicializo los visitantes
    visitors = new ArrayList<Visitor>()

    // conexion con el modem
    modem = new Modem(this, using_modem);

    // conexion con la base de datos
    sql = new Sql();

    // en que puerto escucho mis mensajes
    oscGateway = new OscP5(this, oscInputPort);

    // hacia donde mando mensajes
    oscTerminalLocation = new NetAddress("192.168.1.101",  oscTerminalPort);
    oscVisualLocation = new NetAddress("127.0.0.1",    oscVisualPort);


    // el thread en el que voy a correr la GUI
    runner = new Thread(this, "Ser Liquido Core")
    runner.start();

  }


  /**
   * metodo invocado cuando recibo un mensaje OSC
   * En general recibe mensajes desde la terminal de acceso.
   *
   */

  void oscEvent(OscMessage theOscMessage) {

    logger.info("oscEvent()");
    logger.info("++ addrpattern: "+  theOscMessage.addrPattern());
    logger.info("++ typetag: "  +  theOscMessage.typetag());

    if(theOscMessage.checkAddrPattern("/codeEntered"))  {  codeEntered(theOscMessage); }

    else if(theOscMessage.checkAddrPattern("/timeOut")){                 }
    // TODO agregar metodo timeOut();
    // detengo la visualizacion
    // espero a que el visitante salga.

  }

  /**
   * flitros de texto
   * @param name
   * @return
   */
  String checkName(String name){
    String output = "";
    for(int i = 0; i < name.length(); i++){
      output += ( validLetter(name.charAt(i)) );
    }
    return output;
  }


  String alphabet = "abcdefghijklmnopqrstuvwxyz ";
  char validLetter(char aLetter){
    for (int i=0;i<alphabet.length();i++){
      if (Character.toLowerCase(aLetter) == alphabet.charAt(i)) return Character.toLowerCase(aLetter);
    }
    return '+';
  }
 
  /**
   *   callBack invocado por el modem cuando recibe un mensaje nuevo
   *  este metodo se encarga de filtrar los mensajes segun el estado
   *  del visitante
   * 
   */

  public void modemEvent(JSONObject message) {

    logger.info("modemEvent()")

    String originator   = null;
    String date     = null;
    String text     = null;


    // TODO Validar que sea un mensaje valido...
    // que haya algo en el campo texto sino salen imagenes gigantes

    try {   

      logger.info("++ parsing message: ");
      // si hay algun problema con el mensaje va a saltar la e.     
      originator   = message.getString("originator");
      date    = message.getString("date");   
      text    = checkName(message.getString("text"));

      // si tengo un originator valido
      // me fijo si el visitante ya existe en la base de datos

      if(sql.rowExists("originator", originator)){
        logger.info("++ visitor exists ");

        // creo un objeto visitor en el array
        // Al visitor le paso como referencia this para que sepa
        // que me tiene que avisar a mi cuando termine de hacer algo
        visitors.add(sql.getVisitor(originator, this));   
        Visitor visitor = visitors.get(visitors.size() - 1);

        // agrego el texto como segundo nombre
        visitor.setName2((String) message.get("text"));

        // y luego veo que tengo que hacer
        visitorExists(visitor);


      }else{

        logger.info("++ visitor dont exists ");

        // el visitante no existe
        // creo un objeto visitor en el array temporal
        // tomo el ultimo siempre
        visitors.add(new Visitor(this))
        Visitor v = visitors.get(visitors.size() - 1);

        // agrego los datos al visitor
        v.setOriginator((String) message.get("originator"));     
        v.setName1((String) message.get("text"));

        // y luego veo que tengo que hacer
        visitorDontExist(v);
      }

      // por alguna razon no puede abrir el mensaje de texto
    } catch (JSONException e) {
      logger.error("READING MESSAGE: " , e);
    }
  }


  private void visitorExists(Visitor visitor) {

    logger.info("visitorExists()")

    // en funcion de su estado hago algo.
    // si ya recibio el codigo se lo vuelvo a enviar
    if(visitor.getStatus().equals(Visitor.READY)){

      // envio el mensaje de confirmacion
      // con el codigo de acceso
      OutboundMessage msg = new OutboundMessage(visitor.getOriginator(), "S.E.R.L.I.Q.U.I.D.O. dice: Y4 pu3d3 1ngr3s4r. Su c0dig0 de 4cc3s0 3s: " + visitor.getCode());
      modem.sendMessage(msg);

      // lo borro de la lista temporal
      visitors.remove(visitor);

    }else{

      // actualizo el visitante en la base de datos
      sql.updateVisitor(visitor);       

      // sale a buscar mas imagenes
      visitor.searchImages();
    }



  }

  private void visitorDontExist(Visitor v) {

    // inserto el visitante en la base de datos
    sql.insertVisitor(v);

    // habilito al visitor a buscar imagenes.       
    // cuando termine de buscar va a llamar al metodo imageSearchFinished
    v.searchImages();
  }


  /**
   * Metodo invocado por los visitors
   * cuando terminan de buscar imagenes
   */

  public void visitorEvent(Visitor visitor) {

    // me fijo en que estado esta este Visitor
    if(visitor.getStatus().equals(Visitor.NAME)){

      // envio el primer mensaje de confirmacion
      OutboundMessage msg = new OutboundMessage(visitor.getOriginator(), "S.E.R.L.I.Q.U.I.D.O. dice: H0l4 " + visitor.getName1() + " �Qu13n t3 gu5t4r1a 53r?");
      modem.sendMessage(msg);

      // actualizo el visitor en la base de datos     
      sql.updateVisitor(visitor);   

      // lo borro de la lista
      visitors.remove(visitor);

    };


    if(visitor.getStatus().equals(Visitor.READY)){

      // genero el codigo
      visitor.setCode(sql.getCode());

      // actualizo el visitor en la base de datos
      // TODO esto esta mal
      // deberia tener un solo metodo para actualizar el visitor

      sql.updateVisitor(visitor);
      //sql.updateVisitorStatus(visitor);   
      //sql.updateVisitorCode(visitor);

      // envio el mensaje de confirmacion
      OutboundMessage msg = new OutboundMessage(visitor.getOriginator(), "S.E.R.L.I.Q.U.I.D.O. dice: Y4 pu3d3 1ngr3s4r. Su c0d1g0 d3 4cc3s0 3s: " + visitor.getCode());
      modem.sendMessage(msg);

      // lo borro de la lista
      visitors.remove(visitor);

    };
  }



  private void codeEntered(OscMessage theOscMessage){

    logger.info("codeEntered() ");


    String codeReceived = theOscMessage.get(0).stringValue();

    //validacion del codigo
    // lo busco en la base de datos
    // me aseguro primero que el visitante existe


    if(sql.rowExists("code", codeReceived)){

      logger.info("VISITOR EXISTS");

      // si el visitante existe,
      // significa que esta en condiciones de ingresar a la carpa
      visitors.add(sql.getVisitorFromCode(codeReceived, this))
      Visitor v = visitors.get(visitors.size() - 1);

      // le aviso a la aplicacion para que cargue las fotos en memoria
      // y se prepare para recibir al visitante
      // El mismo mensaje lo mando a la terminal   

      logger.info("SENDING AKG TO VISUAL + TERMINAL");

      OscMessage myMessage = new OscMessage("/visitorReady")

      myMessage.add(v.getName1());
      myMessage.add(v.getName2());
      oscGateway.send(myMessage, oscVisualLocation);
      oscGateway.send(myMessage, oscTerminalLocation);

    }else{

      logger.info("VISITOR DOESNT EXISTS");

      // el codigo ingresado es incorrecto
      // responde negativo solo a la terminal
      OscMessage myMessage = new OscMessage("/visitorError")
      oscGateway.send(myMessage, oscTerminalLocation);

    }
  }


  public void keyPressed(KeyEvent e) {
    if(e.getKeyChar() == 'n') modem.dummyMessage();
  }

  public void keyReleased(KeyEvent e) {

  }

  public void keyTyped(KeyEvent e) {

  }

  public void run() {
    while(true){
    }
  }
}
TOP

Related Classes of app.SerLiquidoCore

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.