Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.io.BufferedInputStream;
- import java.io.BufferedOutputStream;
- import java.io.BufferedReader;
- import java.io.BufferedWriter;
- import java.io.File;
- import java.io.FileInputStream;
- import java.io.FileNotFoundException;
- import java.io.FileOutputStream;
- import java.io.FileReader;
- import java.io.FileWriter;
- import java.io.IOException;
- import java.io.ObjectInputStream;
- import java.io.ObjectOutputStream;
- import java.io.PrintWriter;
- import java.net.Socket;
- import java.text.ParseException;
- import java.text.SimpleDateFormat;
- import java.util.Date;
- import java.util.Scanner;
- /**
- *
- * @author GRUPO SC055
- *Pedro Neves fc46430
- *João Anastácio fc43284
- *Ricardo Calçado fc46382
- */
- public class ServerThread extends Thread {
- private final String Rep = "Repositorio" + File.separator + "server" + File.separator;
- private final String usersFile = Rep + "usersFile.txt";
- private Socket socket = null;
- ServerThread(Socket inSoc) {
- socket = inSoc;
- }
- /**
- * Metodo que vai correr a thread e efetuar todas as
- * operacoes do utilizador
- */
- public void run() {
- try {
- ObjectOutputStream outStream = new ObjectOutputStream(socket.getOutputStream());
- ObjectInputStream inStream = new ObjectInputStream(socket.getInputStream());
- String user = (String) inStream.readObject();
- String pass = (String) inStream.readObject();
- outStream.writeObject(autenticar(user, pass));
- File dir = new File(Rep + user);
- File userId = new File(Rep + user + File.separator + "vaiSeguir.txt");
- File userId2 = new File(Rep + user + File.separator + "seguidoPor.txt");
- dir.mkdir();
- userId.createNewFile();
- userId2.createNewFile();
- String str = "";
- while ((str = (String) inStream.readObject()) != "Q") {
- switch (str) {
- case "-a":
- String fileName = (String) inStream.readObject();
- File temp = new File(Rep + user + File.separator + fileName);
- if (temp.exists()) {
- System.out.println("Ficheiro existente no servidor");
- } else {
- receiveFile(inStream, user, fileName);
- receiveFile(inStream, user, fileName + "-comments.txt");
- receiveFile(inStream, user, fileName + "-likes.txt");
- }
- break;
- case "-l":
- String who = (String) inStream.readObject();
- File dir5 = new File(Rep + who + File.separator);
- dir5.mkdir();
- File[] files = dir5.listFiles();
- File[] filesimg = new File[files.length];
- int count = 0;
- for (File file : files) {
- if (file.toString().endsWith(".png")) {
- filesimg[count] = file;
- count++;
- }
- }
- outStream.writeObject(Integer.toString(count));
- for (int i = 0; i < count; i++) {
- outStream.writeObject(filesimg[i].toString());
- outStream.writeObject(new SimpleDateFormat("dd-MM-yyyy HH-mm-ss")
- .format(new Date(new File(filesimg[i].toString()).lastModified())));
- }
- outStream.flush();
- break;
- case "-i":
- String who2 = (String) inStream.readObject();
- String namephoto = (String) inStream.readObject();
- BufferedReader bufread4 = new BufferedReader(
- new FileReader(Rep + who2 + File.separator + namephoto + "-comments.txt"));
- BufferedReader bufread5 = new BufferedReader(
- new FileReader(Rep + who2 + File.separator + namephoto + "-likes.txt"));
- int likes = 0;
- int dislikes = 0;
- String readlikes = null;
- while ((readlikes = bufread5.readLine()) != null) {
- if (readlikes.equals("+"))
- likes++;
- if (readlikes.equals("-"))
- dislikes++;
- }
- String line;
- String[] temps = new String[2048];
- int count5 = 0;
- while ((line = bufread4.readLine()) != null) {
- temps[count5] = line;
- count5++;
- }
- outStream.writeObject(Integer.toString(count5));
- for (int i = 0; i < count5; i++) {
- outStream.writeObject(temps[i]);
- }
- outStream.writeObject(Integer.toString(likes));
- outStream.writeObject(Integer.toString(dislikes));
- break;
- case "-g":
- String who1 = (String) inStream.readObject();
- File dir51 = new File(Rep + who1 + File.separator);
- dir51.mkdir();
- File[] files1 = dir51.listFiles();
- File[] filesimg1 = new File[files1.length];
- int count1 = 0;
- for (File file : files1) {
- if (file.toString().contains((".png"))) {
- filesimg1[count1] = file;
- count1++;
- }
- }
- outStream.writeObject(Integer.toString(count1));
- for (int i = 0; i < count1; i++) {
- outStream.writeObject(filesimg1[i].getName().toString());
- sendFile(outStream, who1, filesimg1[i].getName());
- }
- outStream.flush();
- break;
- case "-c":
- String co = (String) inStream.readObject();
- String[] comet = new String[Integer.parseInt(co)];
- for (int i = 0; i < comet.length - 1; i++) {
- comet[i] = (String) inStream.readObject();
- }
- String name4 = (String) inStream.readObject();
- String nomeFoto4 = (String) inStream.readObject();
- BufferedWriter bufwrite4 = new BufferedWriter(
- new FileWriter(Rep + name4 + File.separator + nomeFoto4 + "-comments.txt", true));
- for (int i = 0; i < comet.length - 1; i++) {
- bufwrite4.write(comet[i] + " ");
- }
- bufwrite4.write(" --by: " + user);
- bufwrite4.newLine();
- bufwrite4.flush();
- bufwrite4.close();
- break;
- case "-L":
- String name3 = (String) inStream.readObject();
- String nomeFoto3 = (String) inStream.readObject();
- BufferedWriter bufwrite3 = new BufferedWriter(
- new FileWriter(Rep + name3 + File.separator + nomeFoto3 + "-likes.txt", true));
- bufwrite3.write("+");
- bufwrite3.newLine();
- bufwrite3.flush();
- bufwrite3.close();
- break;
- case "-D":
- String name2 = (String) inStream.readObject();
- String nomeFoto = (String) inStream.readObject();
- BufferedWriter bufwrite2 = new BufferedWriter(
- new FileWriter(Rep + name2 + File.separator + nomeFoto + "-likes.txt", true));
- bufwrite2.write("-");
- bufwrite2.newLine();
- bufwrite2.flush();
- bufwrite2.close();
- break;
- case "-f":
- String name = (String) inStream.readObject();
- BufferedWriter bufwrite = new BufferedWriter(
- new FileWriter(Rep + user + File.separator + "seguidoPor.txt", true));
- bufwrite.write(name);
- bufwrite.newLine();
- bufwrite.flush();
- bufwrite.close();
- break;
- case "-r":
- String name1 = (String) inStream.readObject();
- String line1 = (String) inStream.readObject();
- removeLineFromFile("seguidoPor.txt", user, name1);
- break;
- }
- }
- } catch (IOException | ClassNotFoundException e) {
- e.printStackTrace();
- }
- }
- /**
- * Metodo que serve para autenticar um user consoante a sua password
- * @param user user a ser autenticado
- * @param pass pass do user
- * @return true se a pass for igual a registada, false caso contrario
- * @throws IOException
- * @throws ClassNotFoundException
- */
- private boolean autenticar(String user, String pass) throws IOException, ClassNotFoundException {
- File users = new File(usersFile);
- if (users.exists()) {
- BufferedReader autUser = new BufferedReader(new FileReader(users));
- String line = null;
- while ((line = autUser.readLine()) != null) {
- String[] userPass = line.split(":");
- if (userPass[0].equals(user)) {
- if (userPass[1].equals(pass)) {
- System.out.println(user + " Autenticated.");
- autUser.close();
- return true;
- } else {
- System.out.println("Wrong Password.");
- autUser.close();
- return false;
- }
- }
- }
- autUser.close();
- }
- BufferedWriter regUser = new BufferedWriter(new FileWriter(usersFile, true));
- regUser.write(user + ":" + pass);
- regUser.newLine();
- regUser.flush();
- regUser.close();
- System.out.println("User Registration sucessful");
- return true;
- }
- /**
- * Metodo que vai remover uma linha de um ficheiro
- * @param file ficheiro em que a linha vai ser removida
- * @param user user a quem pertence o ficheiro a ser alterado
- * @param lineToRemove linha a ser removida
- */
- private void receiveFile(ObjectInputStream in, String user, String filename)
- throws IOException, ClassNotFoundException {
- int lbuffer = 1024;
- byte[] buffer = new byte[lbuffer];
- Integer sz = (Integer) in.readObject();
- FileOutputStream fos = new FileOutputStream(Rep + user + File.separator + filename);
- int count = -1;
- while ((sz > 0) && (count = in.read(buffer, 0, lbuffer)) > 0) {
- fos.write(buffer, 0, count);
- sz -= count;
- }
- fos.close();
- }
- /**
- * Metodo que serve para enviar um ficheiro
- * @param out stream na qual vai ser enviada o ficheiro
- * @param user user que vai enviar o ficheiro
- * @param filename ficheiro a ser enviado
- * @throws IOException
- */
- protected void sendFile(ObjectOutputStream out, String user, String filename) throws IOException {
- int lbuffer = 1024;
- byte[] buffer = new byte[lbuffer];
- File fs = new File(Rep + user + File.separator + filename);
- Integer size = new Integer((int) fs.length());
- out.writeObject(size);
- FileInputStream f = new FileInputStream(fs);
- int count = -1;
- while ((count = f.read(buffer, 0, lbuffer)) > 0) {
- out.write(buffer, 0, count);
- out.flush();
- }
- f.close();
- }
- /**
- * Remove linha de um ficheiro
- * @param file a alterar
- * @param user dono do ficheiro
- * @param lineToRemove linha a remover
- */
- private void removeLineFromFile(String file, String user, String lineToRemove) {
- try {
- File inFile = new File(Rep + user + File.separator + file);
- /*
- * if (!inFile.isFile()) {
- * System.out.println("Parameter is not an existing file"); return; }
- */
- // Construct the new file that will later be renamed to the original filename.
- File tempFile = new File(inFile.getAbsolutePath() + ".tmp");
- BufferedReader br = new BufferedReader(new FileReader(Rep + user + File.separator + file));
- PrintWriter pw = new PrintWriter(new FileWriter(tempFile));
- String line = null;
- // Read from the original file and write to the new
- // unless content matches data to be removed.
- while ((line = br.readLine()) != null) {
- if (!line.trim().equals(lineToRemove)) {
- pw.println(line);
- pw.flush();
- }
- }
- pw.close();
- br.close();
- // Delete the original file
- if (!inFile.delete()) {
- System.out.println("Could not delete file");
- return;
- }
- // Rename the new file to the filename the original file had.
- if (!tempFile.renameTo(inFile))
- System.out.println("Could not rename file");
- } catch (FileNotFoundException ex) {
- ex.printStackTrace();
- } catch (IOException ex) {
- ex.printStackTrace();
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement