/example/numberguess/main.dart
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}