You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

Logic.java 12KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270
  1. /*
  2. * To change this license header, choose License Headers in Project Properties.
  3. * To change this template file, choose Tools | Templates
  4. * and open the template in the editor.
  5. */
  6. import java.io.File;
  7. import java.io.FileNotFoundException;
  8. import java.io.IOException;
  9. import java.io.PrintWriter;
  10. import java.io.UnsupportedEncodingException;
  11. import java.util.ArrayList;
  12. import java.util.logging.Level;
  13. import java.util.logging.Logger;
  14. import javax.servlet.ServletException;
  15. import javax.servlet.annotation.WebServlet;
  16. import javax.servlet.http.HttpServlet;
  17. import javax.servlet.http.HttpServletRequest;
  18. import javax.servlet.http.HttpServletResponse;
  19. /**
  20. *
  21. * @author Edi
  22. */
  23. @WebServlet(urlPatterns = {"/IO"})
  24. public class Logic extends HttpServlet {
  25. private ArrayList<Game> games = new ArrayList<>();
  26. /**
  27. * Processes requests for both HTTP <code>GET</code> and <code>POST</code>
  28. * methods.
  29. *
  30. * @param request servlet request
  31. * @param response servlet response
  32. * @throws ServletException if a servlet-specific error occurs
  33. * @throws IOException if an I/O error occurs
  34. */
  35. String context = "";
  36. String input = null;
  37. @Override
  38. public void init() {
  39. try {
  40. resetJSON();
  41. } catch (FileNotFoundException ex) {
  42. Logger.getLogger(Logic.class.getName()).log(Level.SEVERE, null, ex);
  43. }
  44. }
  45. public void writeJSON(String s) throws FileNotFoundException
  46. {
  47. PrintWriter writer = null;
  48. try {
  49. writer = new PrintWriter("game.JSON", "UTF-8");
  50. } catch (UnsupportedEncodingException ex) {
  51. Logger.getLogger(Logic.class.getName()).log(Level.SEVERE, null, ex);
  52. }
  53. writer.println(s);
  54. writer.close();
  55. }
  56. public void resetJSON() throws FileNotFoundException {
  57. File f = new File("game.JSON");
  58. if (f.exists()) {
  59. f.delete();
  60. }
  61. if (!f.exists()) {
  62. writeJSON("{\n" +
  63. " \\\"room\\\": [\n" +
  64. " {\n" +
  65. " \\\"id\\\": 1,\n" +
  66. " \\\"name\\\": \\\"Wohnzimmer\\\",\n" +
  67. " \\\"description\\\": \\\"Der Flur ist lang und alt. Das kann man an den zerkratzten Tapeten, den Rissen in der Decke und am schimmligen Teppich erkennen. Der Anblick der entstellten Leiche mitten im Gang wirst du nie vergessen. An einem Ende des Raumes ist eine Stahltür und am anderen Ende die Badezimmertür, durch die du gekommen bist. Gleich daneben erkennst du eine eiserneTür. Gegenüber an der Wand steht eine alte hölzerne Kommode, in der zwei Schiebefächer fehlen. Alles in diesem Flur ist und vermutlich er selbst auch aus einem anderen Jahrhundert. Nur der Lichtschalter und die Deckenleuchten sehen eher neu aus. Beeil dich nun! Du hast nicht ewig Zeit\\\",\n" +
  68. " \\\"items\\\": [\n" +
  69. " 0,\n" +
  70. " 1,\n" +
  71. " 2,\n" +
  72. " 3,\n" +
  73. " 4,\n" +
  74. " 5\n" +
  75. " ],\n" +
  76. " \\\"gameoverFlag\\\": false\n" +
  77. " }\n" +
  78. " ],\n" +
  79. " \\\"puzzle\\\": [\n" +
  80. " {\n" +
  81. " \\\"id\\\": 0,\n" +
  82. " \\\"name\\\": \\\"Lederjacke\\\",\n" +
  83. " \\\"description\\\": \\\"Beim Schauen auf die schwarze Lederjacke kommt dir eine eher unkonventionelle Idee auf. Vielleicht ist ja da noch sein Handy oder Ähnliches drin, was dir helfen könnte hier rauszukommen.\\\",\n" +
  84. " \\\"solvedText\\\": \\\"Du überlegst, wie du anfangen solltest. Nicht jeden Tag hast du die Möglichkeit eine muffelnde Leiche auszunehmen... Ohne auf den Kopf des jungen Mannes zu blicken durchsuchst du vorsichtig erst die zwei äußeren Taschen. Sind beide bis auf eine eklige Schleimschicht in der Linken leer. Nun versuchst du an die inneren Taschen heranzukommen. Dabeistreift deine rechte Hand das Blut der Leiche. Es ist zum Glück bereits getrocknet. In der inneren Brusttasche ertastest du ein paar Münzen und einen kleinen Schlüssel\\\",\n" +
  85. " \\\"solved\\\": false,\n" +
  86. " \\\"gameOverFlag\\\": false\n" +
  87. " },\n" +
  88. " {\n" +
  89. " \\\"id\\\": 1,\n" +
  90. " \\\"name\\\": \\\"Alte Kommode\\\",\n" +
  91. " \\\"items\\\": [\n" +
  92. " 4\n" +
  93. " ],\n" +
  94. " \\\"description\\\": \\\"Eine alte, kaputte Kommode. Drei Schiebefächer sind bis auf Staub und Spinnennetze komplett leer, Zwei fehlen und Eins ist verriegelt. An ihm ist eine Einkerbung füreinen Schlüssel. Vielleicht ist dort ja etwas nützliches drin.\\\",\n" +
  95. " \\\"solvedText\\\": \\\"Der Schlüssel passt in die Einkerbung und vorsichtig drehst du das Schloss auf. Du ziehst langsam das Schiebefach heraus, doch dann kommt dir ein Klumpen Staub entgegen. Nachdem du dich ausgehustet hast, erkennst du zwei Gegenstände im Fach. Eine Notiz und einen Stahlschlüssel. Die Notiz sagt nur „Gut gemacht! Nur weiter so!“. Ist das hier für ihn ein Spiel oder was?\\\",\n" +
  96. " \\\"dependencyText\\\": \\\"Du musst zuerst das Schloss öffnen!\\\",\n" +
  97. " \\\"solved\\\": false,\n" +
  98. " \\\"gameOverFlag\\\": false\n" +
  99. " },\n" +
  100. " {\n" +
  101. " \\\"id\\\": 2,\n" +
  102. " \\\"name\\\": \\\"Stahltür\\\",\n" +
  103. " \\\"items\\\": [\n" +
  104. " 5\n" +
  105. " ],\n" +
  106. " \\\"description\\\": \\\"Diese Tür ist aus Stahl und verriegelt. Wo geht es hier den weiter?\\\",\n" +
  107. " \\\"solvedText\\\": \\\"Er passt ja! Du freust dich, doch womöglich solltest du das nicht tun, denn wer weiß, was sich weiter in diesem mysteriösen Gebäude verbirgt. Für den Anfang ist es gut erst einmal nicht mehr auf die entstellte Leiche des jungen Mannes starren zu müssen.\\\",\n" +
  108. " \\\"dependencyText\\\": \\\"Da kommst du nicht durch.\\\",\n" +
  109. " \\\"nextRoom\\\": 2,\n" +
  110. " \\\"solved\\\": false,\n" +
  111. " \\\"gameOverFlag\\\": false\n" +
  112. " }\n" +
  113. " ],\n" +
  114. " \\\"item\\\": [\n" +
  115. " {\n" +
  116. " \\\"id\\\": 0,\n" +
  117. " \\\"name\\\": \\\"Leiche\\\",\n" +
  118. " \\\"description\\\": \\\"Der arme Junge! Wem ist er über den Weg gelaufen? Wem bist du über den Weg gelaufen? Was musst du bloß tun, damit du nicht genau so endest? Du bemühst dich auf keinenFall auf den Kopf des schwarzhaarigen Mannes zu blicken oder auf das, was noch davon übrig ist. Du schaust nur auf seine schwarze Lederjacke und gerätst ins Grübeln.\\\",\n" +
  119. " \\\"portableFlag\\\": false,\n" +
  120. " \\\"hiddenFlag\\\": false\n" +
  121. " },\n" +
  122. " {\n" +
  123. " \\\"id\\\": 1,\n" +
  124. " \\\"name\\\": \\\"Badezimmertür\\\",\n" +
  125. " \\\"description\\\": \\\"Diese Tür ist nun verschlossen. Als zuvor das Licht ausgegangen ist, hat die Tür jemand zugeknallt oder dies geschah maschinell. Wobei an der Badezimmertür ist nichtsbesonderes zu erkennen, was wohl darauf hindeutet, dass der Entführer sie zugemacht hat\\\",\n" +
  126. " \\\"portableFlag\\\": false,\n" +
  127. " \\\"hiddenFlag\\\": false\n" +
  128. " },\n" +
  129. " {\n" +
  130. " \\\"id\\\": 2,\n" +
  131. " \\\"name\\\": \\\"Eiserne Tür\\\",\n" +
  132. " \\\"description\\\": \\\"Die Tür ist aus Eisen. Da macht sich nichts dran. Die wurde von der anderen Seite geschlossen. Wenn der Entführer tatsächlich vorher hier in diesem Flur war und die Badezimmertür zugeknallt hat, dann ist er durch die hier wieder raus. Diese Tür zu nehmen ist vielleicht nicht zwingend die beste Wahl.\\\",\n" +
  133. " \\\"portableFlag\\\": false,\n" +
  134. " \\\"hiddenFlag\\\": false\n" +
  135. " },\n" +
  136. " {\n" +
  137. " \\\"id\\\": 3,\n" +
  138. " \\\"name\\\": \\\"Lichtschalter\\\",\n" +
  139. " \\\"description\\\": \\\"Du solltest das Licht erst mal anlassen. Wer weiß, was sonst passieren kann.\\\",\n" +
  140. " \\\"portableFlag\\\": false,\n" +
  141. " \\\"hiddenFlag\\\": false\n" +
  142. " },\n" +
  143. " {\n" +
  144. " \\\"id\\\": 4,\n" +
  145. " \\\"name\\\": \\\"Kleiner Schlüssel\\\",\n" +
  146. " \\\"portableFlag\\\": true,\n" +
  147. " \\\"description\\\": \\\"Wozu könnte der denn passen? Sieht nicht wie ein Schlüssel für eine Tür aus. Dazu ist er viel zu klein.\\\",\n" +
  148. " \\\"hiddenFlag\\\": false\n" +
  149. " },\n" +
  150. " {\n" +
  151. " \\\"id\\\": 5,\n" +
  152. " \\\"name\\\": \\\"Stahlschlüssel\\\",\n" +
  153. " \\\"portableFlag\\\": true,\n" +
  154. " \\\"description\\\": \\\"Dieser Schlüssel ist recht schwer. Der ist definitiv für eine der drei Türen im Flur hier.\\\",\n" +
  155. " \\\"hiddenFlag\\\": false\n" +
  156. " }\n" +
  157. " ],\n" +
  158. " \\\"story\\\": \\\"Deine Augen gewöhnen sich an das grelle Licht der Deckenleuchten und du versuchst kurz zu kapieren, was los ist. Du wurdest gekidnappt! Du bist irgendwo, wahrscheinlich in einem Keller eines Gebäudes. Nur wenige Meter vor dir auf dem alten Teppichboden liegt eine vollkommen entstellte Leiche. Der, der das getan hat, war höchstwahrscheinlich der selbe, der dich gekidnapp'd hat. Und offenbar spielt er hier ein Spiel mit dir, wenn du noch am Leben bist... Na gut, du hast ja keine Wahl. Finde heraus, was hier vor sich geht\\\"\n" +
  159. "}");
  160. }
  161. }
  162. protected void processRequest(HttpServletRequest request, HttpServletResponse response)
  163. throws ServletException, IOException, Exception {
  164. try (PrintWriter out = response.getWriter()) {
  165. /* TODO output your page here. You may use following sample code. */
  166. if(request.getParameter("level-reset") != null)
  167. {
  168. resetJSON();
  169. }
  170. if(request.getParameter("level-submit") != null)
  171. {
  172. writeJSON(request.getParameter("level-submit"));
  173. }
  174. if (request.getParameter("alexaText") != null) {
  175. context = request.getParameter("alexaText");
  176. }
  177. // String deviceId = request.getParameter("deviceId");
  178. out.println(context);
  179. input = request.getParameter("intent");
  180. if (request.getParameter("slot") != null) {
  181. input = input + " " + request.getParameter("slot");
  182. }
  183. if (input != null) {
  184. if (games.isEmpty()) {
  185. games.add(new Game());
  186. //games.add(new Game(deviceId));
  187. }
  188. /*
  189. for(int i = 0; i < games.size(); i++)
  190. {
  191. if(games.get(i).getId() == deviceId)
  192. {
  193. games.get(i).setInput(input);
  194. games.get(i).play();
  195. }
  196. }*/
  197. games.get(0).setInput(input);
  198. games.get(0).play();
  199. }
  200. input = null;
  201. }
  202. }
  203. // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
  204. /**
  205. * Handles the HTTP <code>GET</code> method.
  206. *
  207. * @param request servlet request
  208. * @param response servlet response
  209. * @throws ServletException if a servlet-specific error occurs
  210. * @throws IOException if an I/O error occurs
  211. */
  212. @Override
  213. protected void doGet(HttpServletRequest request, HttpServletResponse response)
  214. throws ServletException, IOException {
  215. response.setIntHeader("Refresh", 2);
  216. try {
  217. processRequest(request, response);
  218. } catch (Exception ex) {
  219. Logger.getLogger(Logic.class.getName()).log(Level.SEVERE, null, ex);
  220. }
  221. }
  222. /**
  223. * Handles the HTTP <code>POST</code> method.
  224. *
  225. * @param request servlet request
  226. * @param response servlet response
  227. * @throws ServletException if a servlet-specific error occurs
  228. * @throws IOException if an I/O error occurs
  229. */
  230. @Override
  231. protected void doPost(HttpServletRequest request, HttpServletResponse response)
  232. throws ServletException, IOException {
  233. response.setIntHeader("Refresh", 2);
  234. try {
  235. processRequest(request, response);
  236. } catch (Exception ex) {
  237. Logger.getLogger(Logic.class.getName()).log(Level.SEVERE, null, ex);
  238. }
  239. }
  240. /**
  241. * Returns a short description of the servlet.
  242. *
  243. * @return a String containing servlet description
  244. */
  245. @Override
  246. public String getServletInfo() {
  247. return "Short description";
  248. }// </editor-fold>
  249. }