Advertisement
Guest User

BACKUUUUP

a guest
Oct 20th, 2018
129
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 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. */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement