Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import javax.xml.crypto.Data;
- import java.awt.*;
- import java.io.Serializable;
- import java.net.*;
- import java.io.IOException;
- import java.sql.SQLOutput;
- import java.util.ArrayList;
- import java.util.Scanner;
- import java.io.*;
- import static java.lang.Thread.sleep;
- class User implements Serializable {
- private String username, password;
- public User(String username, String password) {
- this.username = username;
- this.password = password;
- }
- public String getUsername() {
- return username;
- }
- public String getPassword() {
- return password;
- }
- }
- class DatabaseConnection {
- //Estudar ficheiros de texto e de objetos -> DONE
- //Rever projeto de POO -> DONE
- //Ver como ir buscar a música a uma diretoria e colocar música nessa diretoria
- public DatabaseConnection() {
- }
- boolean username_match (String username){
- ArrayList <User> users = new ArrayList<>();
- //Abrir para a leitura do ficheiro de objetos
- try (ObjectInputStream oin = new ObjectInputStream (new FileInputStream("Users_obj.txt"))) {
- users = (ArrayList) oin.readObject();
- } catch (IOException e){
- System.out.println(e.getMessage());
- } catch (ClassNotFoundException e) {
- e.printStackTrace();
- }
- for (User u: users){
- if (u.getUsername().equals(username)) {
- return true;
- }
- }
- return false;
- }
- boolean password_match (String password){
- ArrayList <User> users = new ArrayList<>();
- try (ObjectInputStream oin = new ObjectInputStream (new FileInputStream("Users_obj.txt"))) {
- users = (ArrayList) oin.readObject();
- } catch (IOException e){
- System.out.println(e.getMessage());
- } catch (ClassNotFoundException e) {
- e.printStackTrace();
- }
- for (User u: users){
- if (u.getPassword().equals(password)) {
- return true;
- }
- }
- return false;
- }
- }
- class MessageParsing {
- public String [] MessageParsing (String message){
- //Separar por ";" e saber o número de pares
- String [] pares = message.split(";");
- String [] campos = new String[pares.length] ;
- if (pares.length >= 3){
- for (int i = 0; i < pares.length; i++){
- String [] aux = pares[i].split("\\|");
- campos[i] = aux[1];
- }
- }
- //É melhor imprimir num ciclo que vai ate ao total de elementos do array, caso contrario opde criar exception
- //System.out.println ("Tipo da mensagem: " + campos[0] + " campo2: " + campos[1] + " campo3: " + campos[2]);
- return campos;
- }
- }
- class UDPMulticastProtocol implements Serializable {
- private String MULTICAST_ADDRESS = "224.3.2.1";
- private int PORT = 4444; //Porto de envio
- DatabaseConnection data = new DatabaseConnection();
- public UDPMulticastProtocol() {
- }
- void login (String username, String password){
- System.out.println("O cliente deseja fazer login");
- System.out.println("Username inserido: " + username);
- System.out.println("Password inserida: " + password);
- //Temos que ir à base de dados checkar se o username existe e qual a password associada e se é igual à inserida ou não
- //username_match(username);
- //password_match(password);
- }
- void register (String username, String password, MulticastSocket socket) throws IOException {
- ArrayList <User> users = new ArrayList<>(); //ArrayList que contém todos os utilizadores
- System.out.println("O cliente deseja registar-se");
- System.out.println("Username inserido: " + username);
- System.out.println("Password inserida: " + password);
- //Temos que ver se existe o username ou não
- if (!data.username_match(username)) {
- System.out.println("BOTA CRIAR CONTAAAAAAAAAAAAAAA");
- //Abrir para escrita no ficheiro de objetos
- User u = new User(username, password);
- users.add(u);
- try {
- ObjectOutputStream oS = new ObjectOutputStream(new FileOutputStream("Users_obj.txt"));
- oS.writeObject(users);
- oS.close();
- } catch (IOException e) {
- System.out.print("ERRO");
- System.out.printf("Ocorreu a exceçao %s ao escrever no ficheiro\n", e);
- }
- }
- else {
- String answer = "ESSE USERNAME JÁ EXISTE";
- try{ //ACHO QUE NÃO É PRECISO O WHILE, MAS JÁ VOU DESCOBRIR
- byte[] buffer = answer.getBytes();
- InetAddress group = InetAddress.getByName(MULTICAST_ADDRESS);
- DatagramPacket packet = new DatagramPacket(buffer, buffer.length, InetAddress.getByName(MULTICAST_ADDRESS), PORT); //mudei aqui
- socket.send(packet);
- } catch (IOException e) {
- e.printStackTrace();
- } finally {
- socket.close();
- }
- }
- /*
- for (User us : users){
- System.out.println(us.getUsername() + " " + us.getPassword());
- }
- */
- }
- void search_music (){
- System.out.println("O cliente deseja procurar musica");
- }
- void make_editor (String novo_editor){
- System.out.println("O cliente deseja tornar o utilizador " + novo_editor + " editor");
- //É primeiro necessário verificar se o utilizador que está a querer tornar o outro num editor é também um editor
- }
- void manage_data (){
- System.out.println("O cliente pretende gerir artistas, álbuns e músicas");
- }
- void search_info (){
- System.out.println("O cliente pretende consultar detalhes sobre álbum e sobre artista");
- }
- void album_review (){
- System.out.println("O cliente pretende escrever uma crítica a um álbum");
- }
- void download (){
- System.out.println("O cliente quer fazer download de uma música");
- }
- void upload (){
- System.out.println("O cliente quer fazer upload de uma música");
- }
- void share_music (){
- System.out.println("O cliente pretende partilhar música com outros utilizadores");
- }
- }
- class AnswerRequests extends Thread {
- //private String MULTICAST_ADDRESS = "224.3.2.1";
- //private int PORT = 4444; //Porto de envio
- private String message;
- private String ip;
- private int porto;
- private MulticastSocket socket;
- MessageParsing parsing = new MessageParsing();
- public AnswerRequests(String message, String ip, int porto, MulticastSocket socket) {
- this.message = message;
- this.ip = ip;
- this.porto = porto;
- this.socket = socket;
- }
- public void run(){
- UDPMulticastProtocol prot = new UDPMulticastProtocol(); //Ver se é aqui que devo chamar o construtor ou não
- System.out.println("Mensagem do cliente (IP: " + ip + ";Porto: " + porto + ")" + ": " + message);
- //Enviar resposta para o cliente
- //MulticastSocket socket = null;
- //Parsing da mensagem
- String [] pares = parsing.MessageParsing(message);
- String type = pares[1];
- // De acordo com o tipo de argumento no campo "type" vamos definir a operacao pretendida e vai ser invocado o respetivo método
- //Trata do pedido para depois enviar a resposta para o cliente
- switch (type) {
- case "login":
- prot.login(pares[2], pares[3]);
- break;
- case "search music":
- prot.search_music();
- break;
- case "make editor":
- prot.make_editor(pares[2]);
- break;
- case "register":
- try {
- prot.register(pares[2], pares[3], socket);
- } catch (IOException e) {
- e.printStackTrace();
- }
- break;
- }
- }
- }
- public class MulticastServer extends Thread {
- private String MULTICAST_ADDRESS = "224.3.2.1";
- private int PORT = 4321; //Porto de recepção
- private int BUFFER_SIZE = 4096;
- private static int SERVER_ID;
- MessageParsing parsemsg = new MessageParsing();
- public static void main(String[] args) {
- SERVER_ID = Integer.parseInt(args[0]); //ID DO SERVIDOR
- MulticastServer server = new MulticastServer();
- server.start(); //Ao invocar o start da thread, estamos a chamar o metodo run()
- }
- public MulticastServer() {
- //super ("Server Multicast #" + (long) (Math.random() * 100));
- super ("Server Multicast #" + SERVER_ID);
- }
- public void run(){
- MulticastSocket socket = null;
- System.out.println(this.getName() + " running..."); //Vai buscar o que está dentro do método do construtor
- try {
- socket = new MulticastSocket(PORT); //cria socket e dá bind
- InetAddress group = InetAddress.getByName(MULTICAST_ADDRESS);
- socket.joinGroup(group); //dá join ao grupo multicast
- while (true) {
- //Recepcao
- byte[] inBuffer = new byte[BUFFER_SIZE];
- DatagramPacket msgIn = new DatagramPacket(inBuffer, inBuffer.length);
- socket.receive(msgIn); //Recebe o datagrama UDP
- String clientIP = msgIn.getAddress().getHostAddress(); //Endereço IP do cliente que enviou a mensagem
- int clientport = msgIn.getPort(); //Porto do cliente
- String message = new String(msgIn.getData(), 0, msgIn.getLength());
- String [] fields = parsemsg.MessageParsing(message);
- if (Integer.parseInt(fields[0]) == SERVER_ID){
- System.out.println("SO VOU RESPONDER EU -> SERVER " + SERVER_ID);
- //Vai buscar a informação da mensagem e lança a thread para tratar do pedido
- AnswerRequests work = new AnswerRequests(message, clientIP , clientport, socket); //Também vou passar a socket por parâmetro
- work.start();
- }
- else{
- //Se for um registo, mudança de informação de álbuns ou cenas que têm que ser replicadas
- //Ou seja, tem que ir para as 3 bases de dados e vai ser este "else" que vai tratar disso
- System.out.println("VOU ESTAR QUIETO -> SERVER " + SERVER_ID);
- }
- }
- } catch (IOException e) {
- e.printStackTrace();
- } finally {
- socket.close(); //Fechar a socket
- }
- }
- }
- /*
- try{
- socket = new MulticastSocket(); //Não é necessário dar bind porque está apenas a enviar
- socket.setTimeToLive(1);
- Scanner keyboardScaner = new Scanner(System.in);
- while (true){
- String keyboard = keyboardScaner.nextLine();
- byte[] buffer = keyboard.getBytes();
- InetAddress group = InetAddress.getByName(MULTICAST_ADDRESS);
- DatagramPacket packet = new DatagramPacket(buffer, buffer.length, InetAddress.getByName(MULTICAST_ADDRESS), PORT); //mudei aqui
- socket.send(packet);
- }
- } catch (IOException e) {
- e.printStackTrace();
- } finally {
- socket.close();
- }
- */
Add Comment
Please, Sign In to add comment