Bressam

Distribuidos - TDE 3 base

May 16th, 2018
418
0
Never
1
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 7.58 KB | None | 0 0
  1. /*
  2.  * To change this license header, choose License Headers in Project Properties.
  3.  * To change this template file, choose Tools | Templates
  4.  * and open the template in the editor.
  5.  */
  6. package trabalho3;
  7.  
  8. import java.io.BufferedOutputStream;
  9. import java.io.ByteArrayInputStream;
  10. import java.io.ByteArrayOutputStream;
  11. //import java.io.EOFException;
  12. //import java.io.IOException;
  13. //import java.io.ObjectInputStream;
  14. //import java.net.UnknownHostException;
  15. import java.io.ByteArrayOutputStream;
  16. import java.io.IOException;
  17. import java.io.ObjectOutputStream;
  18. import java.net.DatagramPacket;
  19. import java.net.InetAddress;
  20. import java.net.MulticastSocket;
  21. import java.util.Scanner;
  22.  
  23. public class processoSender {
  24.     static DatagramPacket msg;
  25.     static InetAddress grupo;
  26.     static MulticastSocket s;
  27.     private static Scanner keyboard;
  28.    
  29.     static int contadorMensagens = 0;
  30.     static String groupIP = "224.0.0.1";
  31.     static int multicastPort = 2000;
  32.     static int IDProcesso = 0;
  33.    
  34.     /*
  35.     // Leitura de teclado
  36.     static String lerGrupo = "1";
  37.     static String enviarMensagem = "2";
  38.     static String verificarCoordenador = "3";
  39.     */
  40.    
  41.     static String mensagem = "";
  42.     static final String DESCONECTAR = "q";
  43.     static final String ELEICAO = "e";
  44.     static final String VERIFICA_COORDENADOR = "v";
  45.     static final String DIVISOR_STRING = ";";
  46.    
  47.    
  48.     static final String menu = "1-Ler grupo\n"
  49.                                 + "2-Enviar mensagem\n"
  50.                                 + "3-Verificar Coordenador\n"
  51.                                 + "q-Encerrar processo";
  52.    
  53.    
  54.     public static void sendMessage(String msgStr) {
  55.         msg=new DatagramPacket(msgStr.getBytes(), msgStr.length(),grupo, 2000);
  56.         System.out.println("Enviando mensagem para o grupo ...");
  57.         try {
  58.             s.send(msg);
  59.         } catch (IOException e) {
  60.             // TODO Auto-generated catch block
  61.             e.printStackTrace();
  62.         }
  63.     }
  64.  
  65.     /*
  66.     public static void receiveMessage(int i) {
  67.         byte[] buf=new byte[1000];
  68.         DatagramPacket recv=new DatagramPacket(buf, buf.length);
  69.         System.err.print("Aguardando mensagem "+i+" ...");
  70.         try {
  71.             s.receive(recv);
  72.             byte[] dest=new byte[recv.getLength()];
  73.             System.arraycopy(recv.getData(), 0, dest, 0, dest.length);
  74.             System.err.println("Mensagen recebida: "+
  75.                     new String(recv.getData(),recv.getOffset(),recv.getLength()));
  76.         } catch (IOException e) {
  77.             // TODO Auto-generated catch block
  78.             e.printStackTrace();
  79.         }
  80.     }
  81.    */
  82.     /*
  83.     public static void sendObj() {
  84.        
  85.         try {
  86.              //Prepare Data
  87.             String message = "Hello there!";
  88.             ByteArrayOutputStream baos = new ByteArrayOutputStream();
  89.             ObjectOutputStream oos;
  90.             oos = new ObjectOutputStream(baos);
  91.             oos.writeObject(message);
  92.             byte[] data = baos.toByteArray();
  93.      
  94.             //Send data
  95.             s.send(new DatagramPacket(data, data.length, grupo, multicastPort));
  96.         } catch (IOException e) {
  97.             // TODO Auto-generated catch block
  98.             e.printStackTrace();
  99.         }
  100.     }
  101.     */
  102.    
  103.     //Funcao de configuracao
  104.     public static void setUp() {
  105.         try {
  106.             System.setProperty("java.net.preferIPv4Stack", "true"); // somente pra mac no wifi
  107.             grupo=InetAddress.getByName(groupIP);
  108.             s=new MulticastSocket(multicastPort);
  109.             System.err.println("Entrando no grupo ...");
  110.             s.joinGroup(grupo);
  111.             System.err.println("Ok.");
  112.            // s.setLoopbackMode(true);  //evita de ler a propria mensagem
  113.         } catch (IOException e) {
  114.             // TODO Auto-generated catch block
  115.             e.printStackTrace();
  116.         }
  117.        
  118.     }
  119.    
  120.     public static void defineIDProcesso(){
  121.         keyboard = new Scanner(System.in);
  122.         System.out.println("Informe o ID deste processo: ");
  123.         IDProcesso = keyboard.nextInt();
  124.     }
  125.    
  126.     public static boolean verificaCoordenador(){
  127.         //envia mensagem para coordenador, se nao receber resposta dentro do timeout faz eleicao
  128.        
  129.         //Se receber resposta do coordenador
  130.         //return true;
  131.         //se falhar
  132.         return false;
  133.     }
  134.     /*
  135.     public static int opcoesTeclado(){
  136.         keyboard = new Scanner(System.in);
  137.         System.out.println(menu);
  138.         mensagem = keyboard.nextLine();
  139.         if(mensagem.equals(lerGrupo)){
  140.             contadorMensagens++;
  141.             receiveMessage(contadorMensagens);
  142.         }else if(mensagem.equals(enviarMensagem)){
  143.             //sendObj();
  144.             keyboard = new Scanner(System.in);
  145.             System.out.println("Mensagem a ser enviada: ");
  146.             mensagem = keyboard.nextLine();
  147.             sendMessage(mensagem);
  148.         }else if(mensagem.equals(verificarCoordenador)){
  149.             //System.out.println("Opcao 3 selecionada");
  150.             if(verificaCoordenador()){
  151.                 //Achou coordenador
  152.              }else{
  153.                 //Nao achou coordenador, faz eleicao
  154.              }
  155.         }else if(mensagem.equalsIgnoreCase(sair)){
  156.             break;
  157.         }
  158.     }
  159.     */
  160.     public static String recebeMensagem(){
  161.         byte[] buf=new byte[1000];
  162.         DatagramPacket recv=new DatagramPacket(buf, buf.length);
  163.         try {
  164.             s.receive(recv);
  165.             byte[] dest=new byte[recv.getLength()];
  166.             System.arraycopy(recv.getData(), 0, dest, 0, dest.length);
  167.             String mensagemRecebida = new String(recv.getData(),recv.getOffset(),recv.getLength());
  168.             System.err.println("Mensagen recebida: "+ mensagemRecebida);
  169.             return mensagemRecebida;
  170.         } catch (IOException e) {
  171.             // TODO Auto-generated catch block
  172.             e.printStackTrace();
  173.             return "";
  174.         }
  175.     }
  176.    
  177.     public static int trataMensagem(String mensagemRecebida){
  178.         String[] partes = mensagemRecebida.split(DIVISOR_STRING);
  179.         String operacao = partes[0];
  180.         String mensagem = partes[1];
  181.         if(operacao.equals(VERIFICA_COORDENADOR)){
  182.             return 1;
  183.         }else if(operacao.equals(ELEICAO)){
  184.             return 2;
  185.         }else if(operacao.equals(DESCONECTAR)){
  186.             if(Integer.parseInt(mensagem) == IDProcesso){
  187.                 return 3;
  188.             }
  189.             else return 0;
  190.         }else if(operacao.equals("")){
  191.             return -1;
  192.         }else{
  193.             // mensagem ignorada
  194.             return 0;
  195.         }
  196.     }
  197.    
  198.     public static void main(String[] args) {
  199.         try {
  200.             setUp();
  201.             defineIDProcesso();
  202.             //sendMessage("Novo membro no grupo");
  203.             while(true) {
  204.                 switch(trataMensagem(recebeMensagem())){
  205.                 case 1:
  206.                     //Verificar Coordenador
  207.                     break;
  208.                 case 2:
  209.                     //Realizar eleicao
  210.                     break;
  211.                 case 0:
  212.                 //  System.err.print("mensagem ignorada");
  213.                     break;
  214.                 case -1:
  215.                     System.err.print("Mensagem nao recebida");
  216.                     break;
  217.                 case 3:
  218.                     System.err.println("Processo "+IDProcesso+" saindo do grupo...");
  219.                     s.leaveGroup(grupo);
  220.                     System.err.println("Desconectado do grupo.");
  221.                 default:
  222.                     System.err.print("Case default");
  223.                     break;
  224.                 }
  225.             }
  226.         } catch(Exception exc) {
  227.             exc.printStackTrace();
  228.         }
  229.     }
  230. }
Advertisement
Comments
  • User was banned
Add Comment
Please, Sign In to add comment