Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- * 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 trabalho3;
- import java.io.BufferedOutputStream;
- import java.io.ByteArrayInputStream;
- import java.io.ByteArrayOutputStream;
- //import java.io.EOFException;
- //import java.io.IOException;
- //import java.io.ObjectInputStream;
- //import java.net.UnknownHostException;
- import java.io.ByteArrayOutputStream;
- import java.io.IOException;
- import java.io.ObjectOutputStream;
- import java.net.DatagramPacket;
- import java.net.InetAddress;
- import java.net.MulticastSocket;
- import java.util.Scanner;
- public class processoSender {
- static DatagramPacket msg;
- static InetAddress grupo;
- static MulticastSocket s;
- private static Scanner keyboard;
- static int contadorMensagens = 0;
- static String groupIP = "224.0.0.1";
- static int multicastPort = 2000;
- static int IDProcesso = 0;
- /*
- // Leitura de teclado
- static String lerGrupo = "1";
- static String enviarMensagem = "2";
- static String verificarCoordenador = "3";
- */
- static String mensagem = "";
- static final String DESCONECTAR = "q";
- static final String ELEICAO = "e";
- static final String VERIFICA_COORDENADOR = "v";
- static final String DIVISOR_STRING = ";";
- static final String menu = "1-Ler grupo\n"
- + "2-Enviar mensagem\n"
- + "3-Verificar Coordenador\n"
- + "q-Encerrar processo";
- public static void sendMessage(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 void receiveMessage(int i) {
- byte[] buf=new byte[1000];
- DatagramPacket recv=new DatagramPacket(buf, buf.length);
- System.err.print("Aguardando mensagem "+i+" ...");
- try {
- s.receive(recv);
- byte[] dest=new byte[recv.getLength()];
- System.arraycopy(recv.getData(), 0, dest, 0, dest.length);
- System.err.println("Mensagen recebida: "+
- new String(recv.getData(),recv.getOffset(),recv.getLength()));
- } catch (IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- */
- /*
- public static void sendObj() {
- try {
- //Prepare Data
- String message = "Hello there!";
- ByteArrayOutputStream baos = new ByteArrayOutputStream();
- ObjectOutputStream oos;
- oos = new ObjectOutputStream(baos);
- oos.writeObject(message);
- byte[] data = baos.toByteArray();
- //Send data
- s.send(new DatagramPacket(data, data.length, grupo, multicastPort));
- } catch (IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- */
- //Funcao de configuracao
- public static void setUp() {
- try {
- System.setProperty("java.net.preferIPv4Stack", "true"); // somente pra mac no wifi
- grupo=InetAddress.getByName(groupIP);
- s=new MulticastSocket(multicastPort);
- System.err.println("Entrando no grupo ...");
- s.joinGroup(grupo);
- System.err.println("Ok.");
- // s.setLoopbackMode(true); //evita de ler a propria mensagem
- } 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 deste processo: ");
- IDProcesso = keyboard.nextInt();
- }
- public static boolean verificaCoordenador(){
- //envia mensagem para coordenador, se nao receber resposta dentro do timeout faz eleicao
- //Se receber resposta do coordenador
- //return true;
- //se falhar
- return false;
- }
- /*
- public static int opcoesTeclado(){
- keyboard = new Scanner(System.in);
- System.out.println(menu);
- mensagem = keyboard.nextLine();
- if(mensagem.equals(lerGrupo)){
- contadorMensagens++;
- receiveMessage(contadorMensagens);
- }else if(mensagem.equals(enviarMensagem)){
- //sendObj();
- keyboard = new Scanner(System.in);
- System.out.println("Mensagem a ser enviada: ");
- mensagem = keyboard.nextLine();
- sendMessage(mensagem);
- }else if(mensagem.equals(verificarCoordenador)){
- //System.out.println("Opcao 3 selecionada");
- if(verificaCoordenador()){
- //Achou coordenador
- }else{
- //Nao achou coordenador, faz eleicao
- }
- }else if(mensagem.equalsIgnoreCase(sair)){
- break;
- }
- }
- */
- public static String recebeMensagem(){
- byte[] buf=new byte[1000];
- DatagramPacket recv=new DatagramPacket(buf, buf.length);
- try {
- 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 (IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- return "";
- }
- }
- public static int trataMensagem(String mensagemRecebida){
- String[] partes = mensagemRecebida.split(DIVISOR_STRING);
- String operacao = partes[0];
- String mensagem = partes[1];
- if(operacao.equals(VERIFICA_COORDENADOR)){
- return 1;
- }else if(operacao.equals(ELEICAO)){
- return 2;
- }else if(operacao.equals(DESCONECTAR)){
- if(Integer.parseInt(mensagem) == IDProcesso){
- return 3;
- }
- else return 0;
- }else if(operacao.equals("")){
- return -1;
- }else{
- // mensagem ignorada
- return 0;
- }
- }
- public static void main(String[] args) {
- try {
- setUp();
- defineIDProcesso();
- //sendMessage("Novo membro no grupo");
- while(true) {
- switch(trataMensagem(recebeMensagem())){
- case 1:
- //Verificar Coordenador
- break;
- case 2:
- //Realizar eleicao
- break;
- case 0:
- // System.err.print("mensagem ignorada");
- break;
- case -1:
- System.err.print("Mensagem nao recebida");
- break;
- case 3:
- System.err.println("Processo "+IDProcesso+" saindo do grupo...");
- s.leaveGroup(grupo);
- System.err.println("Desconectado do grupo.");
- default:
- System.err.print("Case default");
- break;
- }
- }
- } catch(Exception exc) {
- exc.printStackTrace();
- }
- }
- }
Advertisement