Guest User

Untitled

a guest
Mar 26th, 2018
39
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 10.77 KB | None | 0 0
  1. import java.io.BufferedInputStream;
  2. import java.io.BufferedOutputStream;
  3. import java.io.BufferedReader;
  4. import java.io.BufferedWriter;
  5. import java.io.File;
  6. import java.io.FileInputStream;
  7. import java.io.FileNotFoundException;
  8. import java.io.FileOutputStream;
  9. import java.io.FileReader;
  10. import java.io.FileWriter;
  11. import java.io.IOException;
  12. import java.io.ObjectInputStream;
  13. import java.io.ObjectOutputStream;
  14. import java.io.PrintWriter;
  15. import java.net.Socket;
  16. import java.text.ParseException;
  17. import java.text.SimpleDateFormat;
  18. import java.util.Date;
  19. import java.util.Scanner;
  20. /**
  21.  *
  22.  * @author GRUPO SC055
  23.  *Pedro Neves fc46430
  24.  *João Anastácio fc43284
  25.  *Ricardo Calçado fc46382
  26.  */
  27. public class ServerThread extends Thread {
  28.  
  29.     private final String Rep = "Repositorio" + File.separator + "server" + File.separator;
  30.     private final String usersFile = Rep + "usersFile.txt";
  31.     private Socket socket = null;
  32.  
  33.     ServerThread(Socket inSoc) {
  34.         socket = inSoc;
  35.  
  36.     }
  37.     /**
  38.      * Metodo que vai correr a thread e efetuar todas as
  39.      * operacoes do utilizador
  40.      */
  41.     public void run() {
  42.         try {
  43.             ObjectOutputStream outStream = new ObjectOutputStream(socket.getOutputStream());
  44.             ObjectInputStream inStream = new ObjectInputStream(socket.getInputStream());
  45.  
  46.             String user = (String) inStream.readObject();
  47.             String pass = (String) inStream.readObject();
  48.  
  49.             outStream.writeObject(autenticar(user, pass));
  50.             File dir = new File(Rep + user);
  51.             File userId = new File(Rep + user + File.separator + "vaiSeguir.txt");
  52.             File userId2 = new File(Rep + user + File.separator + "seguidoPor.txt");
  53.             dir.mkdir();
  54.             userId.createNewFile();
  55.             userId2.createNewFile();
  56.             String str = "";
  57.             while ((str = (String) inStream.readObject()) != "Q") {
  58.  
  59.                 switch (str) {
  60.  
  61.                 case "-a":
  62.                     String fileName = (String) inStream.readObject();
  63.                     File temp = new File(Rep + user + File.separator + fileName);
  64.  
  65.                     if (temp.exists()) {
  66.                         System.out.println("Ficheiro existente no servidor");
  67.                     } else {
  68.                         receiveFile(inStream, user, fileName);
  69.                         receiveFile(inStream, user, fileName + "-comments.txt");
  70.                         receiveFile(inStream, user, fileName + "-likes.txt");
  71.                     }
  72.                     break;
  73.                 case "-l":
  74.                     String who = (String) inStream.readObject();
  75.                     File dir5 = new File(Rep + who + File.separator);
  76.                     dir5.mkdir();
  77.                     File[] files = dir5.listFiles();
  78.                     File[] filesimg = new File[files.length];
  79.                     int count = 0;
  80.                     for (File file : files) {
  81.                         if (file.toString().endsWith(".png")) {
  82.                             filesimg[count] = file;
  83.                             count++;
  84.                         }
  85.  
  86.                     }
  87.                     outStream.writeObject(Integer.toString(count));
  88.                     for (int i = 0; i < count; i++) {
  89.                         outStream.writeObject(filesimg[i].toString());
  90.  
  91.                         outStream.writeObject(new SimpleDateFormat("dd-MM-yyyy HH-mm-ss")
  92.                                 .format(new Date(new File(filesimg[i].toString()).lastModified())));
  93.                     }
  94.  
  95.                     outStream.flush();
  96.  
  97.                     break;
  98.                 case "-i":
  99.                     String who2 = (String) inStream.readObject();
  100.                     String namephoto = (String) inStream.readObject();
  101.                     BufferedReader bufread4 = new BufferedReader(
  102.                             new FileReader(Rep + who2 + File.separator + namephoto + "-comments.txt"));
  103.                     BufferedReader bufread5 = new BufferedReader(
  104.                             new FileReader(Rep + who2 + File.separator + namephoto + "-likes.txt"));
  105.                     int likes = 0;
  106.                     int dislikes = 0;
  107.                     String readlikes = null;
  108.                     while ((readlikes = bufread5.readLine()) != null) {
  109.                         if (readlikes.equals("+"))
  110.                             likes++;
  111.                         if (readlikes.equals("-"))
  112.                             dislikes++;
  113.                     }
  114.  
  115.                     String line;
  116.                     String[] temps = new String[2048];
  117.                     int count5 = 0;
  118.                     while ((line = bufread4.readLine()) != null) {
  119.  
  120.                         temps[count5] = line;
  121.                         count5++;
  122.                     }
  123.                     outStream.writeObject(Integer.toString(count5));
  124.  
  125.                     for (int i = 0; i < count5; i++) {
  126.                         outStream.writeObject(temps[i]);
  127.  
  128.                     }
  129.                     outStream.writeObject(Integer.toString(likes));
  130.                     outStream.writeObject(Integer.toString(dislikes));
  131.                     break;
  132.  
  133.                 case "-g":
  134.                     String who1 = (String) inStream.readObject();
  135.                     File dir51 = new File(Rep + who1 + File.separator);
  136.                     dir51.mkdir();
  137.                     File[] files1 = dir51.listFiles();
  138.                     File[] filesimg1 = new File[files1.length];
  139.                     int count1 = 0;
  140.                     for (File file : files1) {
  141.                         if (file.toString().contains((".png"))) {
  142.                             filesimg1[count1] = file;
  143.                             count1++;
  144.                         }
  145.                     }
  146.                     outStream.writeObject(Integer.toString(count1));
  147.                     for (int i = 0; i < count1; i++) {
  148.                         outStream.writeObject(filesimg1[i].getName().toString());
  149.                         sendFile(outStream, who1, filesimg1[i].getName());
  150.  
  151.                     }
  152.                     outStream.flush();
  153.                     break;
  154.                 case "-c":
  155.                     String co = (String) inStream.readObject();
  156.                     String[] comet = new String[Integer.parseInt(co)];
  157.                     for (int i = 0; i < comet.length - 1; i++) {
  158.                         comet[i] = (String) inStream.readObject();
  159.                     }
  160.                     String name4 = (String) inStream.readObject();
  161.                     String nomeFoto4 = (String) inStream.readObject();
  162.                     BufferedWriter bufwrite4 = new BufferedWriter(
  163.                             new FileWriter(Rep + name4 + File.separator + nomeFoto4 + "-comments.txt", true));
  164.                     for (int i = 0; i < comet.length - 1; i++) {
  165.                         bufwrite4.write(comet[i] + " ");
  166.                     }
  167.                     bufwrite4.write(" --by: " + user);
  168.                     bufwrite4.newLine();
  169.                     bufwrite4.flush();
  170.                     bufwrite4.close();
  171.                     break;
  172.                 case "-L":
  173.                     String name3 = (String) inStream.readObject();
  174.                     String nomeFoto3 = (String) inStream.readObject();
  175.                     BufferedWriter bufwrite3 = new BufferedWriter(
  176.                             new FileWriter(Rep + name3 + File.separator + nomeFoto3 + "-likes.txt", true));
  177.                     bufwrite3.write("+");
  178.                     bufwrite3.newLine();
  179.                     bufwrite3.flush();
  180.                     bufwrite3.close();
  181.                     break;
  182.  
  183.                 case "-D":
  184.                     String name2 = (String) inStream.readObject();
  185.                     String nomeFoto = (String) inStream.readObject();
  186.                     BufferedWriter bufwrite2 = new BufferedWriter(
  187.                             new FileWriter(Rep + name2 + File.separator + nomeFoto + "-likes.txt", true));
  188.                     bufwrite2.write("-");
  189.                     bufwrite2.newLine();
  190.                     bufwrite2.flush();
  191.                     bufwrite2.close();
  192.                     break;
  193.                 case "-f":
  194.                     String name = (String) inStream.readObject();
  195.                     BufferedWriter bufwrite = new BufferedWriter(
  196.                             new FileWriter(Rep + user + File.separator + "seguidoPor.txt", true));
  197.                     bufwrite.write(name);
  198.                     bufwrite.newLine();
  199.                     bufwrite.flush();
  200.                     bufwrite.close();
  201.                     break;
  202.                 case "-r":
  203.                     String name1 = (String) inStream.readObject();
  204.                     String line1 = (String) inStream.readObject();
  205.                     removeLineFromFile("seguidoPor.txt", user, name1);
  206.                     break;
  207.  
  208.                 }
  209.             }
  210.  
  211.         } catch (IOException | ClassNotFoundException e) {
  212.             e.printStackTrace();
  213.         }
  214.  
  215.     }
  216.     /**
  217.      * Metodo que serve para autenticar um user consoante a sua password
  218.      * @param user user a ser autenticado
  219.      * @param pass pass do user
  220.      * @return true se a pass for igual a registada, false caso contrario
  221.      * @throws IOException
  222.      * @throws ClassNotFoundException
  223.      */
  224.     private boolean autenticar(String user, String pass) throws IOException, ClassNotFoundException {
  225.  
  226.         File users = new File(usersFile);
  227.         if (users.exists()) {
  228.  
  229.             BufferedReader autUser = new BufferedReader(new FileReader(users));
  230.             String line = null;
  231.  
  232.             while ((line = autUser.readLine()) != null) {
  233.                 String[] userPass = line.split(":");
  234.                 if (userPass[0].equals(user)) {
  235.                     if (userPass[1].equals(pass)) {
  236.                         System.out.println(user + " Autenticated.");
  237.                         autUser.close();
  238.                         return true;
  239.                     } else {
  240.                         System.out.println("Wrong Password.");
  241.                         autUser.close();
  242.                         return false;
  243.                     }
  244.                 }
  245.             }
  246.             autUser.close();
  247.         }
  248.         BufferedWriter regUser = new BufferedWriter(new FileWriter(usersFile, true));
  249.         regUser.write(user + ":" + pass);
  250.         regUser.newLine();
  251.         regUser.flush();
  252.         regUser.close();
  253.         System.out.println("User Registration sucessful");
  254.  
  255.         return true;
  256.  
  257.     }
  258.     /**
  259.      * Metodo que vai remover uma linha de um ficheiro
  260.      * @param file ficheiro em que a linha vai ser removida
  261.      * @param user user a quem pertence o ficheiro a ser alterado
  262.      * @param lineToRemove linha a ser removida
  263.      */
  264.     private void receiveFile(ObjectInputStream in, String user, String filename)
  265.             throws IOException, ClassNotFoundException {
  266.         int lbuffer = 1024;
  267.         byte[] buffer = new byte[lbuffer];
  268.         Integer sz = (Integer) in.readObject();
  269.         FileOutputStream fos = new FileOutputStream(Rep + user + File.separator + filename);
  270.  
  271.         int count = -1;
  272.         while ((sz > 0) && (count = in.read(buffer, 0, lbuffer)) > 0) {
  273.             fos.write(buffer, 0, count);
  274.             sz -= count;
  275.         }
  276.         fos.close();
  277.     }
  278.     /**
  279.      * Metodo que serve para enviar um ficheiro
  280.      * @param out stream na qual vai ser enviada o ficheiro
  281.      * @param user user que vai enviar o ficheiro
  282.      * @param filename ficheiro a ser enviado
  283.      * @throws IOException
  284.      */
  285.     protected void sendFile(ObjectOutputStream out, String user, String filename) throws IOException {
  286.         int lbuffer = 1024;
  287.         byte[] buffer = new byte[lbuffer];
  288.         File fs = new File(Rep + user + File.separator + filename);
  289.         Integer size = new Integer((int) fs.length());
  290.         out.writeObject(size);
  291.  
  292.         FileInputStream f = new FileInputStream(fs);
  293.         int count = -1;
  294.         while ((count = f.read(buffer, 0, lbuffer)) > 0) {
  295.             out.write(buffer, 0, count);
  296.             out.flush();
  297.         }
  298.         f.close();
  299.  
  300.     }
  301.     /**
  302.      * Remove linha de um ficheiro
  303.      * @param file a alterar
  304.      * @param user dono do ficheiro
  305.      * @param lineToRemove linha a remover
  306.      */
  307.     private void removeLineFromFile(String file, String user, String lineToRemove) {
  308.         try {
  309.  
  310.             File inFile = new File(Rep + user + File.separator + file);
  311.             /*
  312.              * if (!inFile.isFile()) {
  313.              * System.out.println("Parameter is not an existing file"); return; }
  314.              */
  315.             // Construct the new file that will later be renamed to the original filename.
  316.             File tempFile = new File(inFile.getAbsolutePath() + ".tmp");
  317.  
  318.             BufferedReader br = new BufferedReader(new FileReader(Rep + user + File.separator + file));
  319.             PrintWriter pw = new PrintWriter(new FileWriter(tempFile));
  320.  
  321.             String line = null;
  322.  
  323.             // Read from the original file and write to the new
  324.             // unless content matches data to be removed.
  325.             while ((line = br.readLine()) != null) {
  326.                 if (!line.trim().equals(lineToRemove)) {
  327.                     pw.println(line);
  328.                     pw.flush();
  329.                 }
  330.             }
  331.             pw.close();
  332.             br.close();
  333.  
  334.             // Delete the original file
  335.             if (!inFile.delete()) {
  336.                 System.out.println("Could not delete file");
  337.                 return;
  338.             }
  339.  
  340.             // Rename the new file to the filename the original file had.
  341.             if (!tempFile.renameTo(inFile))
  342.                 System.out.println("Could not rename file");
  343.  
  344.         } catch (FileNotFoundException ex) {
  345.             ex.printStackTrace();
  346.         } catch (IOException ex) {
  347.             ex.printStackTrace();
  348.         }
  349.     }
  350. }
Add Comment
Please, Sign In to add comment