org.inspira.polivoto.threading.LittleServant.java Source code

Java tutorial

Introduction

Here is the source code for org.inspira.polivoto.threading.LittleServant.java

Source

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package org.inspira.polivoto.threading;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.util.Map;
import java.util.TreeMap;
import javax.crypto.BadPaddingException;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.NoSuchPaddingException;
import org.inspira.polivoto.forms.PapeletaDeParticipante;
import org.inspira.polivoto.networking.AccionesDeCliente;
import org.inspira.polivoto.networking.IOHandler;
import org.inspira.polivoto.providers.LogProvider;
import org.inspira.polivoto.storage.InfoPapeleta;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

/**
 *
 * @author jcapiz
 */
public class LittleServant extends Thread {

    private Socket sock;
    private AccionesDeCliente accionesDeCliente;
    private IOHandler ioHandler;
    private String boleta;
    private String perfil;
    private String title;
    private String[] opciones;
    private String tituloVotacion;
    private Map<Integer, InfoPapeleta> papeletas;

    public LittleServant(Socket socket, AccionesDeCliente accionesDeCliente) {
        this.sock = socket;
        this.accionesDeCliente = accionesDeCliente;
        papeletas = new TreeMap<>();
    }

    @Override
    public void run() {
        try {
            LogProvider.logMessage("Little Servant", "El capturista ya se report bienene");
            IOHandler ioHandler = new IOHandler(new DataInputStream(sock.getInputStream()),
                    new DataOutputStream(sock.getOutputStream()));
            byte[] chunk = ioHandler.handleIncommingMessage();

            JSONObject json = new JSONObject(new String(accionesDeCliente.decrypt(chunk)));
            switch (json.getInt("content")) {
            case 1:
                this.ioHandler = ioHandler;
                boleta = json.getString("boleta");
                perfil = json.getString("perfil");

                // Recibimos la boleta del participante. Para llegar a ste punto
                // la boleta previamente est ya validada. Aqu hay oportunidad de
                // crecimiento al agregar tal vez algo para asegurarse de que no se
                // puede iniciar el proceso desde ste punto...
                /**
                 * Consulta preguntas para participante *
                 */
                int resp;
                JSONArray preguntasParticipante = accionesDeCliente.consultaPreguntasParticipante(boleta);
                tituloVotacion = accionesDeCliente.pideTituloDeVotacion();
                if (preguntasParticipante.length() > 0) {
                    /**
                     * Consulta opciones para preguntas de participante *
                     */
                    for (int i = 0; i < preguntasParticipante.length(); i++) {
                        title = preguntasParticipante.getString(i);
                        JSONArray jarr = accionesDeCliente.consultaOpcionesPreguntaParticipante(title);
                        opciones = new String[jarr.length()];
                        for (int k = 0; k < opciones.length; k++) {
                            opciones[k] = jarr.getString(k);
                        }
                        papeletas.put(i + 1, new InfoPapeleta(title, opciones));
                        launchPapeleta(papeletas.get(i + 1));
                    }
                } else {
                    resp = 24;
                    System.out.println("El participante ha votado");
                    ioHandler.writeInt(resp);
                    sock.close();
                }
                break;
            case 2:
                sock.close();
                break;
            case 3:
                ioHandler = ioHandler;
                boleta = json.getString("boleta");
                perfil = json.getString("perfil");
                break;
            }
        } catch (IOException | JSONException | BadPaddingException | InvalidKeyException | IllegalBlockSizeException
                | NoSuchPaddingException | NoSuchAlgorithmException e) {
            e.printStackTrace();
            LogProvider.logMessage("M O R T O S ", "Sadly we came here");
            try {
                ioHandler.writeInt(-1);
            } catch (NullPointerException | IOException e1) {
                e1.printStackTrace();
            }
        }
    }

    private void launchPapeleta(InfoPapeleta info) {
        /* Create and display the form */
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new PapeletaDeParticipante(ioHandler, accionesDeCliente, tituloVotacion, boleta, info, perfil)
                        .setVisible(true);
            }
        });
    }
}