/*
* 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
0 B
|👍
/👎