Advertisement
Guest User

PARAR É MORRER

a guest
Oct 21st, 2018
133
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 28.69 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, user_type;
  14.  
  15.     public User(String username, String password, String user_type) {
  16.         this.username = username;
  17.         this.password = password;
  18.         this.user_type = user_type;
  19.     }
  20.  
  21.     public String getUsername() {
  22.         return username;
  23.     }
  24.  
  25.     public String getPassword() {
  26.         return password;
  27.     }
  28.  
  29.     public String getUser_type() { return user_type; }
  30.  
  31.     public void setUser_type(String user_type) {
  32.         this.user_type = user_type;
  33.     }
  34. }
  35.  
  36. class Music implements Serializable {
  37.     private String artist, genre, album, name;
  38.     private int duration;
  39.  
  40.     public Music(String artist, String genre, String album, String name, int duration) {
  41.         this.artist = artist;
  42.         this.genre = genre;
  43.         this.album = album;
  44.         this.name = name;
  45.         this.duration = duration;
  46.     }
  47.  
  48.     public String getArtist() {
  49.         return artist;
  50.     }
  51.  
  52.     public String getGenre() {
  53.         return genre;
  54.     }
  55.  
  56.     public String getAlbum_title() {
  57.         return album;
  58.     }
  59.  
  60.     public String getName() {
  61.         return name;
  62.     }
  63.  
  64.     public int getDuration() {
  65.         return duration;
  66.     }
  67. }
  68.  
  69. class Album implements Serializable {
  70.     private String album_name, description;
  71.     private int rating; //rating médio
  72.     ArrayList <Music> music_list = new ArrayList<>(); //TALVEZ PÔR PRIVATE
  73.     ArrayList <Review> review_list = new ArrayList<>(); //TALVEZ PÔR PRIVATE
  74.  
  75.     public Album(String album_name, String description, int rating, ArrayList<Music> music_list, ArrayList<Review> review_list) {
  76.         this.album_name = album_name;
  77.         this.description = description;
  78.         this.rating = rating;
  79.         this.music_list = music_list;
  80.         this.review_list = review_list;
  81.     }
  82.  
  83.     public String getAlbum_name() {
  84.         return album_name;
  85.     }
  86.  
  87.     public String getDescription() {
  88.         return description;
  89.     }
  90.  
  91.     public int getRating() {
  92.         return rating;
  93.     }
  94.  
  95.     public ArrayList<Music> getMusic_list() {
  96.         return music_list;
  97.     }
  98.  
  99.     public ArrayList<Review> getReview_list() {
  100.         return review_list;
  101.     }
  102.  
  103.     public void setDescription(String description) {
  104.         this.description = description;
  105.     }
  106.  
  107.     public void setRating(int rating) {
  108.         this.rating = rating;
  109.     }
  110. }
  111.  
  112. class Review implements Serializable { //AINDA TENHO QUE VER PRECISA DE SERIALIZABLE OU NÃO
  113.     private String text;
  114.     private int rating;
  115.     private User user;
  116.  
  117.     public Review(String text, int rating, User user) {
  118.         this.text = text;
  119.         this.rating = rating;
  120.         this.user = user;
  121.     }
  122.  
  123.     public String getText() {
  124.         return text;
  125.     }
  126.  
  127.     public int getRating() {
  128.         return rating;
  129.     }
  130.  
  131.     public User getUser() {
  132.         return user;
  133.     }
  134. }
  135.  
  136.  
  137. class DatabaseConnection {
  138.     //Ver como ir buscar a música a uma diretoria e colocar música nessa diretoria
  139.  
  140.     public DatabaseConnection() {
  141.     }
  142.  
  143.     boolean username_match (String username){
  144.  
  145.         ArrayList <User> users = new ArrayList<>();
  146.  
  147.         //Abrir para a leitura do ficheiro de objetos
  148.         try (ObjectInputStream oin = new ObjectInputStream (new FileInputStream("Users_obj.txt"))) {
  149.             users = (ArrayList) oin.readObject();
  150.         } catch (IOException e){
  151.             System.out.println(e.getMessage());
  152.         } catch (ClassNotFoundException e) {
  153.             e.printStackTrace();
  154.         }
  155.  
  156.         for (User u: users){
  157.             if (u.getUsername().equals(username)) {
  158.                 return true;
  159.             }
  160.         }
  161.  
  162.         return false;
  163.     }
  164.  
  165.     boolean password_match (String username, String password){
  166.         //Tenho que procurar por username e depois por password
  167.         //Porque se procuro apenas pela password, pode encontrar a password certa, mas ser de outro utilizador
  168.  
  169.         ArrayList <User> users = new ArrayList<>();
  170.  
  171.         try (ObjectInputStream oin = new ObjectInputStream (new FileInputStream("Users_obj.txt"))) {
  172.             users = (ArrayList) oin.readObject();
  173.         } catch (IOException e){
  174.             System.out.println(e.getMessage());
  175.         } catch (ClassNotFoundException e) {
  176.             e.printStackTrace();
  177.         }
  178.  
  179.         for (User u: users) {
  180.             if (u.getUsername().equals(username)) {
  181.                 if (u.getPassword().equals(password)) {
  182.                     return true;
  183.                 }
  184.             }
  185.  
  186.         }
  187.         return false;
  188.     }
  189.  
  190.     void write_user_file(String text, ArrayList <User> users) { //Para escrever no ficheiro de utilizadores
  191.         try {
  192.             ObjectOutputStream oS = new ObjectOutputStream(new FileOutputStream(text));
  193.             oS.writeObject(users);
  194.             oS.close();
  195.  
  196.         } catch (IOException e) {
  197.             System.out.print("ERRO");
  198.             System.out.printf("Ocorreu a exceçao %s ao escrever no ficheiro\n", e);
  199.         }
  200.     }
  201.  
  202.     User get_User (String username){ //Para ir buscar o utilizador
  203.  
  204.         ArrayList <User> users = new ArrayList<>();
  205.  
  206.         try (ObjectInputStream oin = new ObjectInputStream (new FileInputStream("Users_obj.txt"))) {
  207.             users = (ArrayList) oin.readObject();
  208.         } catch (IOException e){
  209.             System.out.println(e.getMessage());
  210.         } catch (ClassNotFoundException e) {
  211.             e.printStackTrace();
  212.         }
  213.  
  214.         for (User u: users){
  215.             if (u.getUsername().equals(username)) {
  216.                 return u;
  217.             }
  218.         }
  219.  
  220.         return null;
  221.     }
  222.  
  223.     ArrayList <Album> get_AlbumList (){
  224.         ArrayList <Album> album_list = new ArrayList<>();
  225.  
  226.         try (ObjectInputStream oin = new ObjectInputStream (new FileInputStream("AlbumList_obj.txt"))) {
  227.             album_list = (ArrayList) oin.readObject();
  228.         } catch (IOException e){
  229.             System.out.println(e.getMessage());
  230.         } catch (ClassNotFoundException e) {
  231.             e.printStackTrace();
  232.         }
  233.  
  234.         return album_list;
  235.     }
  236.  
  237.     void write_albumlist_file (String text, ArrayList <Album> album_list) { //Para escrever no ficheiro de álbuns
  238.         try {
  239.             ObjectOutputStream oS = new ObjectOutputStream(new FileOutputStream(text));
  240.             oS.writeObject(album_list);
  241.             oS.close();
  242.  
  243.         } catch (IOException e) {
  244.             System.out.print("ERRO");
  245.             System.out.printf("Ocorreu a exceçao %s ao escrever no ficheiro\n", e);
  246.         }
  247.     }
  248.  
  249.  
  250. }
  251.  
  252.  
  253. class MessageParsing {
  254.  
  255.     public String [] MessageParsing (String message){
  256.  
  257.         //Separar por ";" e saber o número de pares
  258.         String [] pares  = message.split(";");
  259.         String  [] campos = new String[pares.length] ;
  260.  
  261.         if (pares.length >= 3){ //NAO SEI SE PRECISO DESTA CONDICAO OU NAO, TENHO QUE TER ATENCAO POR CAUSA DA EXCEPTION
  262.             for (int i = 0; i < pares.length; i++){
  263.                 String [] aux = pares[i].split("\\|");
  264.                 campos[i] = aux[1];
  265.             }
  266.         }
  267.  
  268.         //É melhor imprimir num ciclo que vai ate ao total de elementos do array, caso contrario opde criar exception
  269.         //System.out.println ("Tipo da mensagem: " + campos[0] + " campo2: " + campos[1] + " campo3: " + campos[2]);
  270.  
  271.         return campos;
  272.     }
  273.  
  274. }
  275.  
  276.  
  277. class UDPMulticastProtocol implements Serializable {
  278.  
  279.     private String MULTICAST_ADDRESS = "224.3.2.1";
  280.     private int PORT = 4444; //Porto de envio
  281.     DatabaseConnection data = new DatabaseConnection();
  282.  
  283.     public UDPMulticastProtocol() {
  284.     }
  285.  
  286.     void login (String username, String password, MulticastSocket socket, int server_id){
  287.         System.out.println("O cliente deseja fazer login");
  288.         System.out.println("Username inserido: " + username);
  289.         System.out.println("Password inserida: " + password);
  290.         //Temos que ir à base de dados checkar se o username existe e qual a password associada e se é igual à inserida ou não
  291.  
  292.  
  293.         if (data.username_match(username)){
  294.             if (data.password_match(username, password)){ //SUCESSO
  295.                 //System.out.println("GREAT SUCCESS");
  296.                 String rsp = "server_id|" + server_id + "; type|status" + "; logged|on; " + "msg|Welcome to DropMusic";
  297.  
  298.                 try{
  299.                     byte[] buffer = rsp.getBytes();
  300.                     InetAddress group = InetAddress.getByName(MULTICAST_ADDRESS);
  301.                     DatagramPacket packet = new DatagramPacket(buffer, buffer.length, InetAddress.getByName(MULTICAST_ADDRESS), PORT); //mudei aqui
  302.                     socket.send(packet);
  303.  
  304.                 } catch (IOException e) {
  305.                     e.printStackTrace();
  306.                 }
  307.  
  308.             }
  309.             else { //PASSWORD ERRADA
  310.                 //System.out.println("PASSWORD ERRADA");
  311.                 String rsp = "server_id|" + server_id + "; type|status" + "; logged|failed; " + "msg|Password incorreta";
  312.  
  313.                 try{
  314.                     byte[] buffer = rsp.getBytes();
  315.                     InetAddress group = InetAddress.getByName(MULTICAST_ADDRESS);
  316.                     DatagramPacket packet = new DatagramPacket(buffer, buffer.length, InetAddress.getByName(MULTICAST_ADDRESS), PORT); //mudei aqui
  317.                     socket.send(packet);
  318.  
  319.                 } catch (IOException e) {
  320.                     e.printStackTrace();
  321.                 }
  322.             }
  323.         }
  324.  
  325.         else{ //UTILIZADOR NAO EXISTE
  326.             //System.out.println("Utilizador nao existe");
  327.             String rsp = "server_id|" + server_id + "; type|status" + "; logged|failed; " + "msg|Utilizador nao existe";
  328.  
  329.             try{
  330.                 byte[] buffer = rsp.getBytes();
  331.                 InetAddress group = InetAddress.getByName(MULTICAST_ADDRESS);
  332.                 DatagramPacket packet = new DatagramPacket(buffer, buffer.length, InetAddress.getByName(MULTICAST_ADDRESS), PORT); //mudei aqui
  333.                 socket.send(packet);
  334.  
  335.             } catch (IOException e) {
  336.                 e.printStackTrace();
  337.             }
  338.         }
  339.  
  340.  
  341.     }
  342.  
  343.     void register (String username, String password, MulticastSocket socket, int server_id) throws IOException {
  344.  
  345.         ArrayList <User> users = new ArrayList<>(); //ArrayList que contém todos os utilizadores
  346.         //Abrir para a leitura do ficheiro de objetos
  347.         try (ObjectInputStream oin = new ObjectInputStream (new FileInputStream("Users_obj.txt"))) {
  348.             users = (ArrayList) oin.readObject();
  349.         } catch (IOException e){
  350.             System.out.println(e.getMessage());
  351.         } catch (ClassNotFoundException e) {
  352.             e.printStackTrace();
  353.         }
  354.  
  355.         System.out.println("O cliente deseja registar-se");
  356.         System.out.println("Username inserido: " + username);
  357.         System.out.println("Password inserida: " + password);
  358.  
  359.         //Temos que ver se existe o username ou não
  360.         if (!data.username_match(username)) {
  361.  
  362.             //Abrir para escrita no ficheiro de objetos
  363.             if (users.isEmpty()){ //Se der mal, vou ver se o tamanho e zero
  364.                 User u = new User(username, password, "admin");
  365.                 users.add(u);
  366.             }
  367.             else{
  368.                 User u = new User(username, password, "normal");
  369.                 users.add(u);
  370.             }
  371.  
  372.             try {
  373.                 ObjectOutputStream oS = new ObjectOutputStream(new FileOutputStream("Users_obj.txt"));
  374.                 oS.writeObject(users);
  375.                 oS.close();
  376.  
  377.             } catch (IOException e) {
  378.                 System.out.print("ERRO");
  379.                 System.out.printf("Ocorreu a exceçao %s ao escrever no ficheiro\n", e);
  380.             }
  381.  
  382.             String rsp = "server_id|" + server_id + "; type|status;" + "; register|successful; " + "msg|Welcome to DropMusic";
  383.             try{
  384.  
  385.                 byte[] buffer = rsp.getBytes();
  386.  
  387.                 InetAddress group = InetAddress.getByName(MULTICAST_ADDRESS);
  388.                 DatagramPacket packet = new DatagramPacket(buffer, buffer.length, InetAddress.getByName(MULTICAST_ADDRESS), PORT); //mudei aqui
  389.                 socket.send(packet);
  390.  
  391.             } catch (IOException e) {
  392.                 e.printStackTrace();
  393.             }
  394.         }
  395.  
  396.         else {
  397.             String rsp = "server_id|" + server_id + "; type|status;" + "; register|unsuccessful; " + "msg|Esse username ja existe";
  398.  
  399.             try{
  400.                 byte[] buffer = rsp.getBytes();
  401.  
  402.                 InetAddress group = InetAddress.getByName(MULTICAST_ADDRESS);
  403.                 DatagramPacket packet = new DatagramPacket(buffer, buffer.length, InetAddress.getByName(MULTICAST_ADDRESS), PORT); //mudei aqui
  404.                 socket.send(packet);
  405.  
  406.             } catch (IOException e) {
  407.                 e.printStackTrace();
  408.             }
  409.         }
  410.  
  411.         //SÓ PARA VER QUEM TENHO REGISTADO
  412.         for (User uss: users){
  413.             System.out.println(uss.getUsername() + " " + uss.getPassword() + " -> " + uss.getUser_type());
  414.         }
  415.  
  416.  
  417.     }
  418.  
  419.     void search_music (String choice, String name){ //EM FALTA
  420.         System.out.println("O cliente deseja procurar musica");
  421.  
  422.         switch (choice){
  423.             case "all": //Vai procurar por tudo o que os outros "cases" vao procurar
  424.  
  425.                 break;
  426.             case "album": //Vai ao ficheiro de albuns e apresenta a lista de musicas desse album
  427.  
  428.                 break;
  429.             case "music":  //Vai ao ficheiro de musicas e apresenta uma lista de musicas que contenham esse nome
  430.  
  431.                 break;
  432.             case "artist": //Vai ao ficheiro de artistas e apresenta as musicas desse artista
  433.  
  434.                 break;
  435.             case "genre": //Vai ao ficheiro de musicas e procura no arraylist de musicas pelo parâmetro "genre"
  436.  
  437.                 break;
  438.         }
  439.  
  440.     }
  441.  
  442.     void make_editor (String username, String novo_editor, MulticastSocket socket, int server_id){ //TESTAR
  443.         System.out.println("O cliente deseja tornar o utilizador " + novo_editor + " editor");
  444.  
  445.         ArrayList <User> users = new ArrayList<>();
  446.  
  447.         try (ObjectInputStream oin = new ObjectInputStream (new FileInputStream("Users_obj.txt"))) {
  448.             users = (ArrayList) oin.readObject();
  449.         } catch (IOException e){
  450.             System.out.println(e.getMessage());
  451.         } catch (ClassNotFoundException e) {
  452.             e.printStackTrace();
  453.         }
  454.  
  455.         //Verificar se o utilizador que está a querer tornar o outro num editor é também um editor
  456.         if (data.username_match(username)) { //SUCESSO
  457.             for (User u : users) {
  458.                 if (u.getUsername().equals(username)) {
  459.                     if ((u.getUser_type().equals("editor")) || (u.getUser_type().equals("admin"))) {
  460.                         System.out.println("Tem permissao para tornar o utilizador " + novo_editor + " editor");
  461.                         for (User us : users) {
  462.                             if (us.getUsername().equals(novo_editor)) {
  463.                                 us.setUser_type("editor");
  464.                                 data.write_user_file("Users_obj.txt", users);
  465.                                 //ENVIAR RESPOSTA PARA O RMI SERVER
  466.                                 //String rsp = "server_id|" + server_id + "; type|status;" + "; logged|on; " + "msg|Welcome to DropMusic";
  467.                                 String rsp = "server_id|" + server_id + "; type|status" + "; make editor|successful; " + "msg|You can edit now";
  468.                                 try {
  469.                                     byte[] buffer = rsp.getBytes();
  470.                                     InetAddress group = InetAddress.getByName(MULTICAST_ADDRESS);
  471.                                     DatagramPacket packet = new DatagramPacket(buffer, buffer.length, InetAddress.getByName(MULTICAST_ADDRESS), PORT); //mudei aqui
  472.                                     socket.send(packet);
  473.  
  474.                                 } catch (IOException e) {
  475.                                     e.printStackTrace();
  476.                                 }
  477.                             /*} else { //FALTA PÔR ESTE CHECK A FUNCIONAR
  478.                                 System.out.println("Utilizador nao existe");
  479.                                 //ENVIAR RESPOSTA PARA O RMI SERVER
  480.                             }*/
  481.                             }
  482.                         }
  483.                     }
  484.                 }
  485.             }
  486.  
  487.         } else { //ESSE MANO NAO CONSTA DA BASE DE DADOS
  488.             String rsp = "server_id|" + server_id + "; type|status" + "; make editor|unsuccessful; " + "msg|The user you entered is not in our database";
  489.             try {
  490.                 byte[] buffer = rsp.getBytes();
  491.                 InetAddress group = InetAddress.getByName(MULTICAST_ADDRESS);
  492.                 DatagramPacket packet = new DatagramPacket(buffer, buffer.length, InetAddress.getByName(MULTICAST_ADDRESS), PORT); //mudei aqui
  493.                 socket.send(packet);
  494.  
  495.             } catch (IOException e) {
  496.                 e.printStackTrace();
  497.             }
  498.         }
  499.  
  500.  
  501.     }
  502.  
  503.     void manage_data (String username, String choice, String name) { //EM FALTA
  504.         System.out.println("O cliente pretende gerir artistas, álbuns e músicas");
  505.  
  506.         //1. Primeiro tenho que ver se o utilizador que quer editar a info é editor
  507.         ArrayList<User> users = new ArrayList<>();
  508.  
  509.         try (ObjectInputStream oin = new ObjectInputStream(new FileInputStream("Users_obj.txt"))) {
  510.             users = (ArrayList) oin.readObject();
  511.         } catch (IOException e) {
  512.             System.out.println(e.getMessage());
  513.         } catch (ClassNotFoundException e) {
  514.             e.printStackTrace();
  515.         }
  516.  
  517.         if (data.username_match(username)) { //SUCESSO
  518.             for (User u : users) {
  519.                 if (u.getUsername().equals(username)) {
  520.                     if (u.getUser_type().equals("editor")) {
  521.                         System.out.println("Tem permissao para editar");
  522.  
  523.                         //2. Tenho que ir ver no campo da mensagem, se é all, music, album ou review
  524.                         switch (choice) {
  525.                             case "artist":
  526.                                 String artist_name = name;
  527.  
  528.  
  529.                                 break;
  530.  
  531.                             case "album":
  532.                                 String album_title = name;
  533.  
  534.                                 break;
  535.  
  536.                             case "music":
  537.                                 String music_name = name;
  538.  
  539.                                 break;
  540.  
  541.                         }
  542.                         //3. De seguida, abro esse álbum para escrita e vou editar a info que lá está
  543.  
  544.  
  545.                         //4. Por fim envio a resposta ao utilizador
  546.  
  547.                     }
  548.                 }
  549.             }
  550.         }
  551.     }
  552.  
  553.     void search_info (String choice){ //EM FALTA
  554.         System.out.println("O cliente pretende consultar detalhes sobre álbum e sobre artista");
  555.  
  556.         //1. Ver se a choice é album ou artista
  557.         switch (choice){
  558.             case "album": //Ir ao ficheiro de albuns e mostrar toda a informacao sobre o album e mandar ao cliente
  559.  
  560.                 break;
  561.  
  562.             case "artist": //Ir ao ficheiro de artistas e mostrar toda a informacao sobre o artista e mandar ao cliente
  563.  
  564.                 break;
  565.         }
  566.     }
  567.  
  568.     void album_review (String user, String album_title, String rating, String text, MulticastSocket socket, int server_id){ //TESTAR
  569.         System.out.println("O cliente " + user + " pretende escrever uma crítica a um álbum");
  570.         //FALTA VERIFICAR SE A REVIEW TEM MENOS DE 300 CARACTERES-----------------------------------------
  571.  
  572.         //1. TENHO QUE ABRIR O FICHEIRO E PÔR LÁ A INFORMACAO
  573.         ArrayList <Album> album_list = data.get_AlbumList();
  574.  
  575.         User reviewer = data.get_User(user);
  576.  
  577.         Review r = new Review(text, Integer.parseInt(rating), reviewer); //Ver se será melhor o user ou a string com o username
  578.  
  579.         for (Album a: album_list){
  580.             if (a.getAlbum_name().equals(album_title)){
  581.                 a.review_list.add(r); //Adicionar a review à lista de reviews
  582.                 data.write_albumlist_file("AlbumList_obj.txt", album_list);
  583.  
  584.                 //1. NÃO SEI SE NAO PRECISO DE ADICIONAR ALGO AO MÉTODO DO RATING PARA CALCULAR O RATING MÉDIO
  585.                 String rsp = "server_id|" + server_id + "; type|status" + "; review|successful; " + "msg|Your review was submitted";
  586.                 try {
  587.                     byte[] buffer = rsp.getBytes();
  588.                     DatagramPacket packet = new DatagramPacket(buffer, buffer.length, InetAddress.getByName(MULTICAST_ADDRESS), PORT);
  589.                     socket.send(packet);
  590.                 } catch (IOException e) {
  591.                     e.printStackTrace();
  592.                 }
  593.             }
  594.             else { //ÁLBUM NÃO CONSTA DA BASE DE DADOS
  595.                 String rsp = "server_id|" + server_id + "; type|status" + "; review|unsuccessful; " + "msg|The selected album is not in our database";
  596.                 try {
  597.                     byte[] buffer = rsp.getBytes();
  598.                     DatagramPacket packet = new DatagramPacket(buffer, buffer.length, InetAddress.getByName(MULTICAST_ADDRESS), PORT); //mudei aqui
  599.                     socket.send(packet);
  600.                 } catch (IOException e) {
  601.                     e.printStackTrace();
  602.                 }
  603.             }
  604.         }
  605.  
  606.     }
  607.  
  608.     void download (){ //EM FALTA
  609.         System.out.println("O cliente quer fazer download de uma música");
  610.     }
  611.  
  612.     void upload (){ //EM FALTA
  613.         System.out.println("O cliente quer fazer upload de uma música");
  614.     }
  615.  
  616.     void share_music (){ //EM FALTA
  617.         System.out.println("O cliente pretende partilhar música com outros utilizadores");
  618.     }
  619.  
  620. }
  621.  
  622.  
  623. class AnswerRequests extends Thread {
  624.  
  625.     //private String MULTICAST_ADDRESS = "224.3.2.1";
  626.     //private int PORT = 4444; //Porto de envio
  627.     private String message;
  628.     private String ip;
  629.     private int porto;
  630.     private MulticastSocket socket;
  631.     private int server_id;
  632.  
  633.     MessageParsing parsing = new MessageParsing();
  634.  
  635.     public AnswerRequests(String message, String ip, int porto, MulticastSocket socket, int server_id) {
  636.         this.message = message;
  637.         this.ip = ip;
  638.         this.porto = porto;
  639.         this.socket = socket;
  640.         this.server_id = server_id;
  641.     }
  642.  
  643.     public void run(){
  644.  
  645.         UDPMulticastProtocol prot = new UDPMulticastProtocol(); //Ver se é aqui que devo chamar o construtor ou não
  646.         System.out.println("Mensagem do cliente (IP: " + ip + ";Porto: " + porto + ")" + ": " + message);
  647.  
  648.         //Enviar resposta para o cliente
  649.         //MulticastSocket socket = null;
  650.  
  651.         //Parsing da mensagem
  652.         String [] pares = parsing.MessageParsing(message);
  653.         String type = pares[1];
  654.  
  655.         // De acordo com o tipo de argumento no campo "type" vamos definir a operacao pretendida e vai ser invocado o respetivo método
  656.         //Trata do pedido para depois enviar a resposta para o cliente
  657.         switch (type) {
  658.             case "login":
  659.                 prot.login(pares[2], pares[3], socket, server_id);
  660.                 break;
  661.  
  662.             case "search music":
  663.                 prot.search_music(pares[2], pares[3]);
  664.                 break;
  665.  
  666.             case "make editor": //RESOLVER O PROBLEMA: COMO É QUE HEI DE SABER QUEM É QUE ESTÁ A QUERER TORNAR ALGUÉM EDITOR, PARA SABER SE TAMBÉM É EDITOR
  667.                 String username = pares[2];
  668.                 String new_editor = pares[3];
  669.                 prot.make_editor(username, new_editor, socket, server_id); //EDITOR
  670.                 break;
  671.  
  672.             case "register":
  673.                 try {
  674.                     prot.register(pares[2], pares[3], socket, server_id);
  675.                 } catch (IOException e) {
  676.                     e.printStackTrace();
  677.                 }
  678.                 break;
  679.  
  680.             case "edit info":
  681.                 String user = pares[2];
  682.                 String search = pares[3];
  683.                 String msg = pares[4];
  684.                 prot.manage_data(user, search, msg); //EDITOR
  685.                 break;
  686.  
  687.             case "search info":
  688.                 prot.search_info(pares[2]);
  689.                 break;
  690.  
  691.             case "review":
  692.                 String userr = pares[2];
  693.                 String album_name = pares[3];
  694.                 String rating = pares[4];
  695.                 String review_text = pares[5];
  696.                 prot.album_review(userr, album_name, rating, review_text, socket, server_id); //ANY USER
  697.                 break;
  698.  
  699.             case "share music": //DEPOIS
  700.                 prot.share_music();
  701.                 break;
  702.  
  703.             case "download": //DEPOIS
  704.                 prot.download();
  705.                 break;
  706.  
  707.             case "upload":  //DEPOIS
  708.                 prot.upload();
  709.                 break;
  710.         }
  711.  
  712.     }
  713.  
  714. }
  715.  
  716. public class MulticastServer extends Thread {
  717.  
  718.     private String MULTICAST_ADDRESS = "224.3.2.1";
  719.     private int PORT = 4321; //Porto de recepção
  720.     private int BUFFER_SIZE = 4096;
  721.     private static int SERVER_ID;
  722.  
  723.     MessageParsing parsemsg = new MessageParsing();
  724.  
  725.     public static void main(String[] args) {
  726.         SERVER_ID = Integer.parseInt(args[0]); //ID DO SERVIDOR
  727.         MulticastServer server = new MulticastServer();
  728.         server.start(); //Ao invocar o start da thread, estamos a chamar o metodo run()
  729.     }
  730.  
  731.     public MulticastServer() {
  732.         //super ("Server Multicast #" + (long) (Math.random() * 100));
  733.         super ("Server Multicast #" + SERVER_ID);
  734.     }
  735.  
  736.     public void run(){
  737.         MulticastSocket socket = null;
  738.         System.out.println(this.getName() + " running..."); //Vai buscar o que está dentro do método do construtor
  739.  
  740.         try {
  741.             socket = new MulticastSocket(PORT); //cria socket e dá bind
  742.             InetAddress group = InetAddress.getByName(MULTICAST_ADDRESS);
  743.             socket.joinGroup(group); //dá join ao grupo multicast
  744.  
  745.  
  746.             while (true) {
  747.                 //Recepcao
  748.                 byte[] inBuffer = new byte[BUFFER_SIZE];
  749.                 DatagramPacket msgIn = new DatagramPacket(inBuffer, inBuffer.length);
  750.                 socket.receive(msgIn); //Recebe o datagrama UDP
  751.  
  752.                 String clientIP = msgIn.getAddress().getHostAddress(); //Endereço IP do cliente que enviou a mensagem
  753.                 int clientport = msgIn.getPort(); //Porto do cliente
  754.  
  755.                 String message = new String(msgIn.getData(), 0, msgIn.getLength());
  756.                 String [] fields = parsemsg.MessageParsing(message);
  757.  
  758.                 if (Integer.parseInt(fields[0]) == SERVER_ID){
  759.                     System.out.println("SO VOU RESPONDER EU -> SERVER " + SERVER_ID);
  760.  
  761.                     //Vai buscar a informação da mensagem e lança a thread para tratar do pedido
  762.                     AnswerRequests work = new AnswerRequests(message, clientIP , clientport, socket, SERVER_ID); //Também vou passar a socket por parâmetro
  763.                     work.start();
  764.                 }
  765.                 else{
  766.                     //Se for um registo, mudança de informação de álbuns ou cenas que têm que ser replicadas
  767.                     //Ou seja, tem que ir para as 3 bases de dados e vai ser este "else" que vai tratar disso
  768.                     System.out.println("VOU ESTAR QUIETO -> SERVER " + SERVER_ID);
  769.  
  770.                 }
  771.  
  772.             }
  773.  
  774.         } catch (IOException e) {
  775.             e.printStackTrace();
  776.         } finally {
  777.             socket.close(); //Fechar a socket
  778.         }
  779.     }
  780.  
  781. }
  782.  
  783. /*
  784. try{
  785.             socket = new MulticastSocket(); //Não é necessário dar bind porque está apenas a enviar
  786.             socket.setTimeToLive(1);
  787.  
  788.             Scanner keyboardScaner = new Scanner(System.in);
  789.             while (true){
  790.                 String keyboard = keyboardScaner.nextLine();
  791.                 byte[] buffer = keyboard.getBytes();
  792.  
  793.                 InetAddress group = InetAddress.getByName(MULTICAST_ADDRESS);
  794.                 DatagramPacket packet = new DatagramPacket(buffer, buffer.length, InetAddress.getByName(MULTICAST_ADDRESS), PORT); //mudei aqui
  795.                 socket.send(packet);
  796.             }
  797.         } catch (IOException e) {
  798.             e.printStackTrace();
  799.         } finally {
  800.             socket.close();
  801.         }
  802.  */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement