Advertisement
Guest User

Backup à casa

a guest
Oct 18th, 2018
120
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 9.75 KB | None | 0 0
  1. import javax.xml.crypto.Data;
  2. import java.awt.*;
  3. import java.io.Serializable;
  4. import java.net.MulticastSocket;
  5. import java.net.DatagramPacket;
  6. import java.net.InetAddress;
  7. import java.io.IOException;
  8. import java.net.Socket;
  9. import java.sql.SQLOutput;
  10. import java.util.ArrayList;
  11. import java.util.Scanner;
  12. import java.io.*;
  13. import static java.lang.Thread.sleep;
  14.  
  15. class User implements Serializable {
  16.     private String username, password;
  17.  
  18.     public User(String username, String password) {
  19.         this.username = username;
  20.         this.password = password;
  21.     }
  22.  
  23.     public String getUsername() {
  24.         return username;
  25.     }
  26.  
  27.     public String getPassword() {
  28.         return password;
  29.     }
  30. }
  31.  
  32. class DatabaseConnection  {
  33.     //Estudar ficheiros de texto e de objetos
  34.     //Rever projeto de POO
  35.     //Ver como ir buscar a música a uma diretoria e colocar música nessa diretoria
  36.  
  37. }
  38.  
  39.  
  40.  
  41. class UDPMulticastProtocol implements Serializable {
  42.  
  43.     public UDPMulticastProtocol() {
  44.  
  45.     }
  46.  
  47.     // De acordo com o tipo de argumento no primeiro campo (type)
  48.     //vamos definir a operacao pretendida e vai ser invocado o respetivo método
  49.  
  50.     //Acho que vou ter que responder a cada mensagem, mas para enviar o pacote tenho que ver onde
  51.  
  52.     void login (String username, String password){
  53.         System.out.println("O cliente deseja fazer login");
  54.         System.out.println("Username inserido: " + username);
  55.         System.out.println("Password inserida: " + password);
  56.         //Temos que ir à base de dados checkar se o username existe e qual a password associada e se é igual à inserida ou não
  57.         //username_match(username);
  58.         //password_match(password);
  59.  
  60.     }
  61.  
  62.     void register (String username, String password){
  63.         //ArrayList que contém todos os utilizadores
  64.         ArrayList <User> users = new ArrayList<>();
  65.  
  66.         System.out.println("O cliente deseja registar-se");
  67.         System.out.println("Username inserido: " + username);
  68.         System.out.println("Password inserida: " + password);
  69.         //Temos que ver se existe o username ou não
  70.         //username_match(username);
  71.  
  72.         //Abrir para escrita no ficheiro de objetos
  73.         User u = new User(username, password);
  74.         users.add(u);
  75.         try{
  76.             ObjectOutputStream oS = new ObjectOutputStream(new FileOutputStream("Users_obj.txt"));
  77.             oS.writeObject(users);
  78.             oS.close();
  79.  
  80.         }catch(IOException e){
  81.             System.out.print("ERRO");
  82.             System.out.printf("Ocorreu a exceçao %s ao escrever no ficheiro\n", e);
  83.     }
  84.  
  85.         //Abrir para a leitura do ficheiro de objetos
  86.  
  87.         try (ObjectInputStream oin = new ObjectInputStream (new FileInputStream("Users_obj.txt"))) {
  88.             users = (ArrayList) oin.readObject();
  89.             //}catch(IOException | ClassNotFoundException e){
  90.         } catch (IOException e){
  91.             System.out.println(e.getMessage());
  92.         } catch (ClassNotFoundException e) {
  93.             e.printStackTrace();
  94.         }
  95.  
  96.         for (User us : users){
  97.             System.out.println(us.getUsername() + " " + us.getPassword());
  98.         }
  99.  
  100.  
  101.     }
  102.  
  103.     void search_music (){
  104.         System.out.println("O cliente deseja procurar musica");
  105.  
  106.     }
  107.  
  108.     void make_editor (String novo_editor){
  109.         System.out.println("O cliente deseja tornar o utilizador " + novo_editor + " editor");
  110.  
  111.         //É primeiro necessário verificar se o utilizador que está a querer tornar o outro num editor é também um editor
  112.     }
  113.  
  114.     void manage_data (){
  115.         System.out.println("O cliente pretende gerir artistas, álbuns e músicas");
  116.     }
  117.  
  118.     void search_info (){
  119.         System.out.println("O cliente pretende consultar detalhes sobre álbum e sobre artista");
  120.     }
  121.  
  122.     void album_review (){
  123.         System.out.println("O cliente pretende escrever uma crítica a um álbum");
  124.     }
  125.  
  126.     void download (){
  127.         System.out.println("O cliente quer fazer download de uma música");
  128.     }
  129.  
  130.     void upload (){
  131.         System.out.println("O cliente quer fazer upload de uma música");
  132.     }
  133.  
  134.     void share_music (){
  135.         System.out.println("O cliente pretende partilhar música com outros utilizadores");
  136.     }
  137.  
  138. }
  139.  
  140.  
  141. class AnswerRequests extends Thread {
  142.  
  143.     private String MULTICAST_ADDRESS = "224.3.2.1";
  144.     private int PORT = 4444; //Porto de envio
  145.     private String message;
  146.     private String ip;
  147.     private int porto;
  148.  
  149.     public AnswerRequests(String message, String ip, int porto) {
  150.         this.message = message;
  151.         this.ip = ip;
  152.         this.porto = porto;
  153.     }
  154.  
  155.  
  156.     public String [] MessageParsing (String message){
  157.  
  158.         //Separar por ";" e saber o número de pares
  159.         String [] pares  = message.split(";");
  160.         String  [] campos = new String[pares.length] ;
  161.  
  162.         if (pares.length >= 3){
  163.             for (int i = 0; i < pares.length; i++){
  164.                 String [] aux = pares[i].split("\\|");
  165.                 campos[i] = aux[1];
  166.             }
  167.         }
  168.  
  169.         //É melhor imprimir num ciclo que vai ate ao total de elementos do array, caso contrario opde criar exception
  170.         //System.out.println ("Tipo da mensagem: " + campos[0] + " campo2: " + campos[1] + " campo3: " + campos[2]);
  171.  
  172.         return campos;
  173.     }
  174.  
  175.  
  176.     public void run(){
  177.  
  178.         System.out.println("Mensagem do cliente (IP: " + ip + ";Porto: " + porto + ")" + ": " + message);
  179.         //Enviar resposta para o cliente
  180.         MulticastSocket socket = null;
  181.  
  182.         //Parsing da mensagem
  183.         String [] pares = MessageParsing(message);
  184.  
  185.         /*for (int i = 0; i < pares.length; i++){
  186.             System.out.println (pares[i]);
  187.         }*/
  188.  
  189.         UDPMulticastProtocol prot = new UDPMulticastProtocol(); //Ver se é aqui que devo chamar o construtor ou não
  190.  
  191.         //Trata do pedido para depois enviar a resposta para o cliente
  192.         if (pares[0].equals("login")){
  193.             prot.login(pares[1], pares[2]);
  194.         }
  195.         else if (pares[0].equals("search music")){
  196.             prot.search_music();
  197.         }
  198.         else if (pares[0].equals("make editor")){
  199.             prot.make_editor(pares[1]);
  200.         }
  201.         else if (pares[0].equals("register")){
  202.             prot.register(pares[1], pares[2]);
  203.         }
  204.  
  205.  
  206.         try{
  207.             socket = new MulticastSocket(); //Não é necessário dar bind porque está apenas a enviar
  208.             socket.setTimeToLive(1);
  209.  
  210.             Scanner keyboardScaner = new Scanner(System.in);
  211.             while (true){
  212.                 String keyboard = keyboardScaner.nextLine();
  213.                 byte[] buffer = keyboard.getBytes();
  214.  
  215.                 InetAddress group = InetAddress.getByName(MULTICAST_ADDRESS);
  216.                 DatagramPacket packet = new DatagramPacket(buffer, buffer.length, InetAddress.getByName(MULTICAST_ADDRESS), PORT); //mudei aqui
  217.                 socket.send(packet);
  218.             }
  219.         } catch (IOException e) {
  220.             e.printStackTrace();
  221.         } finally {
  222.             socket.close();
  223.         }
  224.  
  225.  
  226.  
  227.  
  228.     }
  229.  
  230. }
  231.  
  232. public class MulticastServer extends Thread {
  233.  
  234.     private String MULTICAST_ADDRESS = "224.3.2.1";
  235.     private int PORT = 4321; //Porto de recepção
  236.     private int BUFFER_SIZE = 4096;
  237.  
  238.     public static void main(String[] args) {
  239.         MulticastServer server = new MulticastServer();
  240.         server.start(); //Ao invocar o start da thread, estamos a chamar o metodo run()
  241.     }
  242.  
  243.     public MulticastServer() {
  244.         super ("Server Multicast #" + (long) (Math.random() * 100));
  245.     }
  246.  
  247.     public void run(){
  248.         MulticastSocket socket = null;
  249.  
  250.         System.out.println(this.getName() + " running..."); //Vai buscar o que está dentro do método do construtor
  251.  
  252.         try {
  253.             socket = new MulticastSocket(PORT); //cria socket e dá bind
  254.             InetAddress group = InetAddress.getByName(MULTICAST_ADDRESS);
  255.             socket.joinGroup(group); //dá join ao grupo multicast
  256.  
  257.  
  258.             while (true) {
  259.                 //Recepcao
  260.                 byte[] inBuffer = new byte[BUFFER_SIZE];
  261.                 DatagramPacket msgIn = new DatagramPacket(inBuffer, inBuffer.length);
  262.                 socket.receive(msgIn); //Recebe o datagrama UDP
  263.  
  264.                 String clientIP = msgIn.getAddress().getHostAddress(); //Endereço IP do cliente que enviou a mensagem
  265.                 int clientport = msgIn.getPort(); //Porto do cliente
  266.  
  267.                 //System.out.println("Received packet from IP " + clientIP + "; Port number -> " + clientport + " with message:");
  268.                 String message = new String(msgIn.getData(), 0, msgIn.getLength());
  269.                 //System.out.println("Mensagem recebida: " + message);
  270.  
  271.                 //Vai buscar a informação da mensagem e lança a thread para tratar do pedido
  272.                 AnswerRequests work = new AnswerRequests(message, clientIP , clientport);
  273.                 work.start();
  274.  
  275.             }
  276.  
  277.         } catch (IOException e) {
  278.             e.printStackTrace();
  279.         } finally {
  280.             socket.close(); //Fechar a socket
  281.         }
  282.     }
  283.  
  284. }
  285.  
  286. //Outra forma de "descompactar" o pacote recebido
  287. //System.out.println("Mensagem recebida: " + new String(inBuffer, 0, inBuffer.length));
  288.  
  289.  
  290. //socket.joinGroup(group);
  291. //socket.setTimeToLive(1);
  292.  
  293. //Envio
  294. /*String msg = this.getName() + "is giving you an warm welcome!";
  295. byte[] buffer = msg.getBytes();
  296.  
  297. //InetAddress group = InetAddress.getByName(MULTICAST_ADDRESS); //Vou mandar um print, mas acho que isto vai buscar o endereço Multicast
  298. DatagramPacket packet = new DatagramPacket(buffer, buffer.length, group, PORT);
  299. socket.send(packet);
  300.  
  301. try { sleep((long) (Math.random() * PAUSE)); } catch (InterruptedException e ){} //Não irá ser necessário
  302. */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement