Advertisement
Guest User

BOTAAAAAAA

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