Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(330)

Side by Side Diff: samples/chat/chat_server_lib.dart

Issue 10837070: Remove old isolate API and update all code in the repository to use (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Fix namespace comment. Created 8 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 #library("chat_server"); 5 #library("chat_server");
6 #import("dart:io"); 6 #import("dart:io");
7 #import("dart:isolate"); 7 #import("dart:isolate");
8 #import("dart:json"); 8 #import("dart:json");
9 9
10 void startChatServer() {
11 var server = new ChatServer();
12 server.init();
13 port.receive((message, replyTo) {
kasperl 2012/08/03 05:20:27 port.receive(server.dispatch)?
Mads Ager (google) 2012/08/03 05:51:35 D'oh! Done for all of them.
14 server.dispatch(message, replyTo);
15 });
16 }
17
10 class ChatServer extends IsolatedServer { 18 class ChatServer extends IsolatedServer {
11 } 19 }
12 20
13 class ServerMain { 21 class ServerMain {
14 ServerMain.start(IsolatedServer server, 22 ServerMain.start(SendPort serverPort,
15 String hostAddress, 23 String hostAddress,
16 int tcpPort, 24 int tcpPort,
17 [int listenBacklog = 5]) 25 [int listenBacklog = 5])
18 : _statusPort = new ReceivePort(), 26 : _statusPort = new ReceivePort(),
19 _serverPort = null { 27 _serverPort = serverPort {
20 server.spawn().then((SendPort port) {
21 _serverPort = port;
22 _start(hostAddress, tcpPort, listenBacklog);
23 });
24 // We can only guess this is the right URL. At least it gives a 28 // We can only guess this is the right URL. At least it gives a
25 // hint to the user. 29 // hint to the user.
26 print('Server starting http://${hostAddress}:${tcpPort}/'); 30 print('Server starting http://${hostAddress}:${tcpPort}/');
31 _start(hostAddress, tcpPort, listenBacklog);
27 } 32 }
28 33
29 void _start(String hostAddress, int tcpPort, int listenBacklog) { 34 void _start(String hostAddress, int tcpPort, int listenBacklog) {
30 // Handle status messages from the server. 35 // Handle status messages from the server.
31 _statusPort.receive((var message, SendPort replyTo) { 36 _statusPort.receive((var message, SendPort replyTo) {
32 String status = message.message; 37 String status = message.message;
33 print("Received status: $status"); 38 print("Received status: $status");
34 }); 39 });
35 40
36 // Send server start message to the server. 41 // Send server start message to the server.
(...skipping 243 matching lines...) Expand 10 before | Expand all | Expand 10 after
280 int get port() => _port; 285 int get port() => _port;
281 Dynamic get error() => _error; 286 Dynamic get error() => _error;
282 287
283 int _state; 288 int _state;
284 String _message; 289 String _message;
285 int _port; 290 int _port;
286 var _error; 291 var _error;
287 } 292 }
288 293
289 294
290 class IsolatedServer extends Isolate { 295 class IsolatedServer {
291 static final String redirectPageHtml = """ 296 static final String redirectPageHtml = """
292 <html> 297 <html>
293 <head><title>Welcome to the dart server</title></head> 298 <head><title>Welcome to the dart server</title></head>
294 <body><h1>Redirecting to the front page...</h1></body> 299 <body><h1>Redirecting to the front page...</h1></body>
295 </html>"""; 300 </html>""";
296 static final String notFoundPageHtml = """ 301 static final String notFoundPageHtml = """
297 <html><head> 302 <html><head>
298 <title>404 Not Found</title> 303 <title>404 Not Found</title>
299 </head><body> 304 </head><body>
300 <h1>Not Found</h1> 305 <h1>Not Found</h1>
(...skipping 212 matching lines...) Expand 10 before | Expand all | Expand 10 after
513 518
514 } else { 519 } else {
515 _protocolError(request, response); 520 _protocolError(request, response);
516 } 521 }
517 } else { 522 } else {
518 _protocolError(request, response); 523 _protocolError(request, response);
519 } 524 }
520 }; 525 };
521 } 526 }
522 527
523 void main() { 528 void init() {
524 _logRequests = false; 529 _logRequests = false;
525 _topic = new Topic(); 530 _topic = new Topic();
526 _serverStart = new Date.now(); 531 _serverStart = new Date.now();
527 _messageCount = 0; 532 _messageCount = 0;
528 _messageRate = new Rate(); 533 _messageRate = new Rate();
529 534
530 // Start a timer for cleanup events. 535 // Start a timer for cleanup events.
531 _cleanupTimer = 536 _cleanupTimer =
532 new Timer.repeating(10000, (timer) => _topic._handleTimer(timer)); 537 new Timer.repeating(10000, (timer) => _topic._handleTimer(timer));
538 }
533 539
534 // Start timer for periodic logging. 540 // Start timer for periodic logging.
535 void _handleLogging(Timer timer) { 541 void _handleLogging(Timer timer) {
536 if (_logging) { 542 if (_logging) {
537 print("${_messageRate.rate} messages/s " 543 print("${_messageRate.rate} messages/s "
538 "(total $_messageCount messages)"); 544 "(total $_messageCount messages)");
545 }
546 }
547
548 void dispatch(message, replyTo) {
549 if (message.isStart) {
550 _host = message.host;
551 _port = message.port;
552 _logging = message.logging;
553 replyTo.send(new ChatServerStatus.starting(), null);
554 _server = new HttpServer();
555 _server.defaultRequestHandler = _notFoundHandler;
556 _server.addRequestHandler(
557 (request) => request.path == "/",
558 (HttpRequest request, HttpResponse response) =>
559 redirectPageHandler(
560 request, response, "dart_client/index.html"));
561 _server.addRequestHandler(
562 (request) => request.path == "/js_client/index.html",
563 (HttpRequest request, HttpResponse response) =>
564 fileHandler(request, response));
565 _server.addRequestHandler(
566 (request) => request.path == "/js_client/code.js",
567 (HttpRequest request, HttpResponse response) =>
568 fileHandler(request, response));
569 _server.addRequestHandler(
570 (request) => request.path == "/dart_client/index.html",
571 (HttpRequest request, HttpResponse response) =>
572 fileHandler(request, response));
573 _server.addRequestHandler(
574 (request) => request.path == "/out.js",
575 (HttpRequest request, HttpResponse response) =>
576 fileHandler(request, response));
577 _server.addRequestHandler(
578 (request) => request.path == "/favicon.ico",
579 (HttpRequest request, HttpResponse response) =>
580 fileHandler(request, response, "static/favicon.ico"));
581
582 _server.addRequestHandler(
583 (request) => request.path == "/join", _joinHandler);
584 _server.addRequestHandler(
585 (request) => request.path == "/leave", _leaveHandler);
586 _server.addRequestHandler(
587 (request) => request.path == "/message", _messageHandler);
588 _server.addRequestHandler(
589 (request) => request.path == "/receive", _receiveHandler);
590 try {
591 _server.listen(_host, _port, backlog: message.backlog);
592 replyTo.send(new ChatServerStatus.started(_server.port), null);
593 _loggingTimer = new Timer.repeating(1000, _handleLogging);
594 } catch (var e) {
595 replyTo.send(new ChatServerStatus.error(e.toString()), null);
539 } 596 }
597 } else if (message.isStop) {
598 replyTo.send(new ChatServerStatus.stopping(), null);
599 stop();
600 replyTo.send(new ChatServerStatus.stopped(), null);
540 } 601 }
541
542 this.port.receive((var message, SendPort replyTo) {
543 if (message.isStart) {
544 _host = message.host;
545 _port = message.port;
546 _logging = message.logging;
547 replyTo.send(new ChatServerStatus.starting(), null);
548 _server = new HttpServer();
549 _server.defaultRequestHandler = _notFoundHandler;
550 _server.addRequestHandler(
551 (request) => request.path == "/",
552 (HttpRequest request, HttpResponse response) =>
553 redirectPageHandler(
554 request, response, "dart_client/index.html"));
555 _server.addRequestHandler(
556 (request) => request.path == "/js_client/index.html",
557 (HttpRequest request, HttpResponse response) =>
558 fileHandler(request, response));
559 _server.addRequestHandler(
560 (request) => request.path == "/js_client/code.js",
561 (HttpRequest request, HttpResponse response) =>
562 fileHandler(request, response));
563 _server.addRequestHandler(
564 (request) => request.path == "/dart_client/index.html",
565 (HttpRequest request, HttpResponse response) =>
566 fileHandler(request, response));
567 _server.addRequestHandler(
568 (request) => request.path == "/out.js",
569 (HttpRequest request, HttpResponse response) =>
570 fileHandler(request, response));
571 _server.addRequestHandler(
572 (request) => request.path == "/favicon.ico",
573 (HttpRequest request, HttpResponse response) =>
574 fileHandler(request, response, "static/favicon.ico"));
575
576 _server.addRequestHandler(
577 (request) => request.path == "/join", _joinHandler);
578 _server.addRequestHandler(
579 (request) => request.path == "/leave", _leaveHandler);
580 _server.addRequestHandler(
581 (request) => request.path == "/message", _messageHandler);
582 _server.addRequestHandler(
583 (request) => request.path == "/receive", _receiveHandler);
584 try {
585 _server.listen(_host, _port, backlog: message.backlog);
586 replyTo.send(new ChatServerStatus.started(_server.port), null);
587 _loggingTimer = new Timer.repeating(1000, _handleLogging);
588 } catch (var e) {
589 replyTo.send(new ChatServerStatus.error(e.toString()), null);
590 }
591 } else if (message.isStop) {
592 replyTo.send(new ChatServerStatus.stopping(), null);
593 stop();
594 replyTo.send(new ChatServerStatus.stopped(), null);
595 }
596 });
597 } 602 }
598 603
599 stop() { 604 stop() {
600 _server.close(); 605 _server.close();
601 _cleanupTimer.cancel(); 606 _cleanupTimer.cancel();
602 this.port.close(); 607 port.close();
603 } 608 }
604 609
605 String _host; 610 String _host;
606 int _port; 611 int _port;
607 HttpServer _server; // HTTP server instance. 612 HttpServer _server; // HTTP server instance.
608 bool _logRequests; 613 bool _logRequests;
609 614
610 Topic _topic; 615 Topic _topic;
611 Timer _cleanupTimer; 616 Timer _cleanupTimer;
612 Timer _loggingTimer; 617 Timer _loggingTimer;
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
679 } 684 }
680 } 685 }
681 686
682 int _timeRange; 687 int _timeRange;
683 List<int> _buckets; 688 List<int> _buckets;
684 int _currentBucket; 689 int _currentBucket;
685 int _currentBucketTime; 690 int _currentBucketTime;
686 num _bucketTimeRange; 691 num _bucketTimeRange;
687 int _sum; 692 int _sum;
688 } 693 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698