Advertisement
Guest User

Untitled

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