/example/numberguess/main.dart

https://bitbucket.org/financecoding/dartwebserver · Dart · 106 lines · 96 code · 10 blank · 0 comment · 12 complexity · b334d2b82aef44bade51b5f7bf7faa6c MD5 · raw file

  1. import 'package:dartwebserver/webserver.dart';
  2. import 'dart:io';
  3. import 'dart:math' as Math;
  4. class NotFoundHandler implements WrappedRequestHandler {
  5. onRequest(HttpRequestWrapper request, HttpResponseWrapper response) {
  6. response.outputStream.writeString("""
  7. NOT FOUND
  8. """);
  9. response.outputStream.close();
  10. }
  11. }
  12. class TheHandler implements WrappedRequestHandler {
  13. Math.Random rnd;
  14. TheHandler() {
  15. rnd = new Math.Random(new Date.now().millisecondsSinceEpoch);
  16. }
  17. onRequest(HttpRequestWrapper request, HttpResponseWrapper response) {
  18. print("request received");
  19. response.statusCode = HttpStatus.OK;
  20. int number;
  21. int guess;
  22. int count;
  23. bool noGuess = true;
  24. Session session = request.session;
  25. if (request.session == null) {
  26. session = response.createSession();
  27. print("creating session");
  28. }
  29. Map<String, int> values = session.values;
  30. print("got session");
  31. if (values["number"] == null) {
  32. values["number"] = rnd.nextInt(100);
  33. values["count"] = 0;
  34. }
  35. number = values["number"];
  36. print("number = $number");
  37. if (request.queryParameters["guess"] != null) {
  38. try {
  39. guess = int.parse(request.queryParameters["guess"]);
  40. values["count"]++;
  41. noGuess = false;
  42. } on FormatException catch (e) {
  43. noGuess = true;
  44. }
  45. }
  46. count = values["count"];
  47. response.outputStream.writeString("""
  48. <html>
  49. <head>
  50. <title>Number Guessing Game</title>
  51. </head>
  52. <body>
  53. <h1>Number Guessing Game</h1>
  54. <img src="question.png"/>""");
  55. if (!noGuess) {
  56. if (guess > number) {
  57. response.outputStream.writeString("<p>${guess} was too high! Try again.</p>");
  58. } else if (guess < number) {
  59. response.outputStream.writeString("<p>${guess} was too low! Try again.</p>");
  60. } else {
  61. response.outputStream.writeString("<p>Correct! Got it in ${count}. Let's do that again.</p>");
  62. values["number"] = rnd.nextInt(100);
  63. count = values["count"] = 0;
  64. }
  65. } else {
  66. response.outputStream.writeString("<p>I've thought of a number. What do you think it is?</p>");
  67. }
  68. response.outputStream.writeString("""
  69. <form action="/">
  70. Guess ${count + 1}
  71. <input name="guess" />
  72. </form>
  73. </body>
  74. </html>
  75. """);
  76. response.outputStream.close();
  77. }
  78. }
  79. void main() {
  80. var server = new Server();
  81. var handler = new TheHandler();
  82. var notFoundHandler = new NotFoundHandler();
  83. File here = new File(".");
  84. String herePath = here.fullPathSync();
  85. print("here: $herePath");
  86. String newPath = "${herePath}/example/numberguess/files";
  87. var fileHandler = new FileHandler(newPath);
  88. fileHandler.notFoundHandler = notFoundHandler;
  89. server.listen('127.0.0.1', 8081);
  90. server.defaultRequestHandler = notFoundHandler;
  91. server.mapRequestHandlers({
  92. r"^/$": handler,
  93. r"^/one$": handler,
  94. r"\.(png|txt|gif|html|jpg)$": fileHandler
  95. });
  96. }