BomberStudentRequest.java 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. package rsx;
  2. import java.io.IOException;
  3. import java.net.InetAddress;
  4. import java.util.HashMap;
  5. import java.util.concurrent.atomic.AtomicBoolean;
  6. import org.json.JSONException;
  7. import org.json.JSONObject;
  8. import rsx.tcp.TcpClient;
  9. /**
  10. * Analyse les requetes emises par le serveur
  11. *
  12. * @author Arthur Brandao
  13. */
  14. public class BomberStudentRequest extends Thread {
  15. /**
  16. * Indique si on coupe la boucle
  17. */
  18. private final AtomicBoolean running = new AtomicBoolean(true);
  19. /**
  20. * Connexion au serveur
  21. */
  22. protected TcpClient socket;
  23. /**
  24. * Liste des handler à appeler
  25. */
  26. protected HashMap<String, BomberStudentHandler> handlers;
  27. /* --- Constructeur --- */
  28. public BomberStudentRequest(InetAddress adr, int port, HashMap<String, BomberStudentHandler> handlers) throws IOException {
  29. this.handlers = handlers;
  30. this.socket = new TcpClient(adr, port);
  31. this.socket.timeout(2);
  32. if (!this.socket.connect()) {
  33. System.err.println("Impossible de créer la socket");
  34. throw new IOException("Connexion impossible");
  35. }
  36. }
  37. /* --- Surcharge --- */
  38. @Override
  39. public void interrupt() {
  40. this.running.set(false);
  41. super.interrupt();
  42. }
  43. @Override
  44. public void run() {
  45. //Tant qu'actif
  46. while (this.running.get()) {
  47. //Attente contact serveur
  48. String msg = this.socket.receive();
  49. //Si rien on continue
  50. if (msg == null) {
  51. continue;
  52. }
  53. //Traitement du message
  54. String[] requete = msg.split("\n");
  55. if (requete.length < 2) {
  56. continue;
  57. }
  58. //Regarde la requete
  59. String[] entete = requete[0].split(" ");
  60. if (entete.length < 2) {
  61. continue;
  62. }
  63. if (!entete[0].equals("POST")) {
  64. continue;
  65. }
  66. //Regarde si il existe un handler
  67. String ressource = entete[1];
  68. if (!this.handlers.containsKey(ressource)) {
  69. continue;
  70. }
  71. //Recup json
  72. JSONObject json = null;
  73. try {
  74. json = new JSONObject(requete[1]);
  75. } catch (JSONException ex) {
  76. System.err.println("La requete n'est pas en JSON : " + ex.getMessage());
  77. continue;
  78. }
  79. //Appel handler
  80. BomberStudentHandler handler = this.handlers.get(ressource);
  81. if(!handler.handle(json)){
  82. System.err.println("Erreur pendant l'execution du handler");
  83. }
  84. }
  85. //Fermeture socket
  86. this.socket.close();
  87. }
  88. }