BomberStudentRequest.java 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  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 entete = this.socket.receive();
  49. //Si rien on continue
  50. if (entete == null) {
  51. continue;
  52. }
  53. //On recup les parametres
  54. String param = this.socket.receive();
  55. //Si rien on continue
  56. if (param == null) {
  57. continue;
  58. }
  59. //Regarde la requete
  60. String[] requete = entete.split(" ");
  61. if (requete.length < 2) {
  62. continue;
  63. }
  64. if (!requete[0].equals("POST")) {
  65. continue;
  66. }
  67. //Regarde si il existe un handler
  68. String ressource = requete[1];
  69. if (!this.handlers.containsKey(ressource)) {
  70. continue;
  71. }
  72. //Recup json
  73. JSONObject json = null;
  74. try {
  75. json = new JSONObject(param);
  76. } catch (JSONException ex) {
  77. System.err.println("La requete n'est pas en JSON : " + ex.getMessage());
  78. continue;
  79. }
  80. //Appel handler
  81. BomberStudentHandler handler = this.handlers.get(ressource);
  82. if(!handler.handle(json)){
  83. System.err.println("Erreur pendant l'execution du handler " + ressource);
  84. }
  85. }
  86. //Fermeture socket
  87. this.socket.close();
  88. }
  89. }