Guest User

Boa noite, era mais um backup sff

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