PageRenderTime 58ms CodeModel.GetById 25ms app.highlight 21ms RepoModel.GetById 1ms app.codeStats 0ms

/example/numberguess/main.dart

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