Bressam icon

ServidorPersistencia - Cliente

Bressam | PRO | 06/28/18 01:39:36 PM UTC | 0 ⭐ | 261 👁️ | Never ⏰ | []
Java |

6.99 KB

|

None

|

0 👍

/

0 👎

/*
 * 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 servidorpersistencia;
 
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.InetAddress;
import java.net.MulticastSocket;
import java.net.SocketTimeoutException;
import java.util.Scanner;
import static servidorpersistencia.ServidorPersistencia.IDProcesso;
import static servidorpersistencia.ServidorPersistencia.grupo;
import static servidorpersistencia.ServidorPersistencia.recv;
 
/**
 *
 * @author giovanne.gaspareto
 */
public class Cliente {
    
    static InetAddress              grupo;
    static MulticastSocket          s;
    static DatagramPacket           msg;
    static DatagramPacket           recv;
    private static Scanner          keyboard;
    
    static final String         GROUP_IP = "224.0.0.1";
    static final int            MULTICAST_PORT = 2000;
    static int                  IDProcesso = 0;
    static String               mensagem = "";
    static int                  numeroProcessosGrupo = 0;
    static int                  tempoRandom = 0;
    static int                  idProcessoNaRegiaoCritica = 0;
    static int                  idRecebido = 0;
    static int                  proximo =   0;
    static int                  escolha = 0;
    static String               mensagemTeclado = "";
    static int                  idBusca = 0;
    static boolean              continuarExecucao = true;
    static String               mensagemTecladoEntrada = "";
    
    static final String         CLIENTE_M = "M";
    static final String         DIVISOR_STRING = ";";
    static final String         BUSCA = "b";
    static final String         INSERCAO = "i";
    static final String         RESPOSTA = "resposta";
    
    public static void setUp(){
        try {
            //System.setProperty("java.net.preferIPv4Stack", "true"); // somente pra mac no wifi
            grupo=InetAddress.getByName(GROUP_IP);
            s=new MulticastSocket(MULTICAST_PORT);
            System.err.println("Entrando no grupo ...");
            s.joinGroup(grupo);
            System.err.println("Ok.");
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    
    public static void defineIDProcesso(){
        keyboard = new Scanner(System.in);
        System.out.println("Informe o ID(i) deste cliente Mi: ");
        IDProcesso = keyboard.nextInt();
    }
    
    public static String receiveMessageGroup(){
        byte[] buf=new byte[1000];
        recv=new DatagramPacket(buf, buf.length);
        try {
            s.setSoTimeout(10);
            s.setLoopbackMode(false);
           // System.out.println("timeout no recevei sem nada: " + s.getSoTimeout());
            s.receive(recv);
            byte[] dest=new byte[recv.getLength()];
            System.arraycopy(recv.getData(), 0, dest, 0, dest.length);
            String mensagemRecebida = new String(recv.getData(),recv.getOffset(),recv.getLength());
         //   System.err.println("Mensagen recebida: "+ mensagemRecebida);
            return mensagemRecebida;
        } catch (SocketTimeoutException ex) {
          // Logger.getLogger(ProcessoSender.class.getName()).log(Level.SEVERE, null, ex);
            return "x;0;0";
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            return "x;0;0";
        }
    }
    
    public static void sendMessageGroup(String msgStr) {
        msg=new DatagramPacket(msgStr.getBytes(), msgStr.length(),grupo, 2000);
       // System.out.println("Enviando mensagem para o grupo ...");
        try {
            s.send(msg);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    
    public static int lerEscolha(){
        keyboard = new Scanner(System.in);
        System.out.println("[Cliente " + IDProcesso+ "]Menu:\n1: Inserir texto \n2: Buscar texto por ID \n3: Desconectar cliente");            
        escolha = keyboard.nextInt();
        return escolha;
    }
    
    public static String lerTeclado(){
        keyboard = new Scanner(System.in);
        System.out.println("Informe o texto a ser enviado: ");
        mensagemTeclado = keyboard.nextLine();
        return mensagemTeclado;
    }
    
    public static int   lerIDBusca(){
        keyboard = new Scanner(System.in);
        System.out.println("Informe o K que sera buscado dentro da base de dados: ");
        escolha = keyboard.nextInt();
        return escolha;
    }
    
    public static void main(String[] args) throws IOException{
       setUp();
       defineIDProcesso();
     //  mensagem = CLIENTE_M+DIVISOR_STRING+IDProcesso;
     // sendMessageGroup(mensagem);
        boolean aguardandoResposta = true;
        String opcao;
        String[] partes = new String[3];
       
       while(continuarExecucao){
       switch(lerEscolha()){
           case 1:
               mensagemTecladoEntrada = lerTeclado();
               mensagem = CLIENTE_M + DIVISOR_STRING + IDProcesso + DIVISOR_STRING + INSERCAO + DIVISOR_STRING +mensagemTecladoEntrada;  // M;1;textoaqui
               sendMessageGroup(mensagem);
                aguardandoResposta = true;
               while(aguardandoResposta){
                   mensagem = receiveMessageGroup();
                   partes = mensagem.split(DIVISOR_STRING);
                   opcao = partes[0];
                   if(opcao.equals(RESPOSTA)){
                       System.out.println(partes[2]);
                       aguardandoResposta = false;
                   }
               }
               break;
           case 2:
               idBusca = lerIDBusca();
               mensagem = CLIENTE_M + DIVISOR_STRING + IDProcesso + DIVISOR_STRING + BUSCA + DIVISOR_STRING + idBusca;
               sendMessageGroup(mensagem);
               System.out.println(receiveMessageGroup());
               aguardandoResposta = true;
 
               while(aguardandoResposta){
                   mensagem = receiveMessageGroup();
                   partes = mensagem.split(DIVISOR_STRING);
                   opcao = partes[0];
                   if(opcao.equals(RESPOSTA)){
                       System.out.println(partes[2]);
                       aguardandoResposta = false;
                   }
               }
               break;
           case 3:
                System.err.println("Cliente "+IDProcesso+ " encerrando conexao...");
                s.leaveGroup(grupo);
               continuarExecucao = false;
            default:
                System.err.println("Case Default leitura do teclado");
                break;
            }
       }
       
       
       System.out.println("Cliente desconectado");
       System.exit(0);
    }
    
}

Comments

  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎