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

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: Address review comments. 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
« no previous file with comments | « samples/chat/chat_server.dart ('k') | samples/dartcombat/player.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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(server.dispatch);
14 }
15
10 class ChatServer extends IsolatedServer { 16 class ChatServer extends IsolatedServer {
11 } 17 }
12 18
13 class ServerMain { 19 class ServerMain {
14 ServerMain.start(IsolatedServer server, 20 ServerMain.start(SendPort serverPort,
15 String hostAddress, 21 String hostAddress,
16 int tcpPort, 22 int tcpPort,
17 [int listenBacklog = 5]) 23 [int listenBacklog = 5])
18 : _statusPort = new ReceivePort(), 24 : _statusPort = new ReceivePort(),
19 _serverPort = null { 25 _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 26 // We can only guess this is the right URL. At least it gives a
25 // hint to the user. 27 // hint to the user.
26 print('Server starting http://${hostAddress}:${tcpPort}/'); 28 print('Server starting http://${hostAddress}:${tcpPort}/');
29 _start(hostAddress, tcpPort, listenBacklog);
27 } 30 }
28 31
29 void _start(String hostAddress, int tcpPort, int listenBacklog) { 32 void _start(String hostAddress, int tcpPort, int listenBacklog) {
30 // Handle status messages from the server. 33 // Handle status messages from the server.
31 _statusPort.receive((var message, SendPort replyTo) { 34 _statusPort.receive((var message, SendPort replyTo) {
32 String status = message.message; 35 String status = message.message;
33 print("Received status: $status"); 36 print("Received status: $status");
34 }); 37 });
35 38
36 // Send server start message to the server. 39 // Send server start message to the server.
(...skipping 243 matching lines...) Expand 10 before | Expand all | Expand 10 after
280 int get port() => _port; 283 int get port() => _port;
281 Dynamic get error() => _error; 284 Dynamic get error() => _error;
282 285
283 int _state; 286 int _state;
284 String _message; 287 String _message;
285 int _port; 288 int _port;
286 var _error; 289 var _error;
287 } 290 }
288 291
289 292
290 class IsolatedServer extends Isolate { 293 class IsolatedServer {
291 static final String redirectPageHtml = """ 294 static final String redirectPageHtml = """
292 <html> 295 <html>
293 <head><title>Welcome to the dart server</title></head> 296 <head><title>Welcome to the dart server</title></head>
294 <body><h1>Redirecting to the front page...</h1></body> 297 <body><h1>Redirecting to the front page...</h1></body>
295 </html>"""; 298 </html>""";
296 static final String notFoundPageHtml = """ 299 static final String notFoundPageHtml = """
297 <html><head> 300 <html><head>
298 <title>404 Not Found</title> 301 <title>404 Not Found</title>
299 </head><body> 302 </head><body>
300 <h1>Not Found</h1> 303 <h1>Not Found</h1>
(...skipping 212 matching lines...) Expand 10 before | Expand all | Expand 10 after
513 516
514 } else { 517 } else {
515 _protocolError(request, response); 518 _protocolError(request, response);
516 } 519 }
517 } else { 520 } else {
518 _protocolError(request, response); 521 _protocolError(request, response);
519 } 522 }
520 }; 523 };
521 } 524 }
522 525
523 void main() { 526 void init() {
524 _logRequests = false; 527 _logRequests = false;
525 _topic = new Topic(); 528 _topic = new Topic();
526 _serverStart = new Date.now(); 529 _serverStart = new Date.now();
527 _messageCount = 0; 530 _messageCount = 0;
528 _messageRate = new Rate(); 531 _messageRate = new Rate();
529 532
530 // Start a timer for cleanup events. 533 // Start a timer for cleanup events.
531 _cleanupTimer = 534 _cleanupTimer =
532 new Timer.repeating(10000, (timer) => _topic._handleTimer(timer)); 535 new Timer.repeating(10000, (timer) => _topic._handleTimer(timer));
536 }
533 537
534 // Start timer for periodic logging. 538 // Start timer for periodic logging.
535 void _handleLogging(Timer timer) { 539 void _handleLogging(Timer timer) {
536 if (_logging) { 540 if (_logging) {
537 print("${_messageRate.rate} messages/s " 541 print("${_messageRate.rate} messages/s "
538 "(total $_messageCount messages)"); 542 "(total $_messageCount messages)");
543 }
544 }
545
546 void dispatch(message, replyTo) {
547 if (message.isStart) {
548 _host = message.host;
549 _port = message.port;
550 _logging = message.logging;
551 replyTo.send(new ChatServerStatus.starting(), null);
552 _server = new HttpServer();
553 _server.defaultRequestHandler = _notFoundHandler;
554 _server.addRequestHandler(
555 (request) => request.path == "/",
556 (HttpRequest request, HttpResponse response) =>
557 redirectPageHandler(
558 request, response, "dart_client/index.html"));
559 _server.addRequestHandler(
560 (request) => request.path == "/js_client/index.html",
561 (HttpRequest request, HttpResponse response) =>
562 fileHandler(request, response));
563 _server.addRequestHandler(
564 (request) => request.path == "/js_client/code.js",
565 (HttpRequest request, HttpResponse response) =>
566 fileHandler(request, response));
567 _server.addRequestHandler(
568 (request) => request.path == "/dart_client/index.html",
569 (HttpRequest request, HttpResponse response) =>
570 fileHandler(request, response));
571 _server.addRequestHandler(
572 (request) => request.path == "/out.js",
573 (HttpRequest request, HttpResponse response) =>
574 fileHandler(request, response));
575 _server.addRequestHandler(
576 (request) => request.path == "/favicon.ico",
577 (HttpRequest request, HttpResponse response) =>
578 fileHandler(request, response, "static/favicon.ico"));
579
580 _server.addRequestHandler(
581 (request) => request.path == "/join", _joinHandler);
582 _server.addRequestHandler(
583 (request) => request.path == "/leave", _leaveHandler);
584 _server.addRequestHandler(
585 (request) => request.path == "/message", _messageHandler);
586 _server.addRequestHandler(
587 (request) => request.path == "/receive", _receiveHandler);
588 try {
589 _server.listen(_host, _port, backlog: message.backlog);
590 replyTo.send(new ChatServerStatus.started(_server.port), null);
591 _loggingTimer = new Timer.repeating(1000, _handleLogging);
592 } catch (var e) {
593 replyTo.send(new ChatServerStatus.error(e.toString()), null);
539 } 594 }
595 } else if (message.isStop) {
596 replyTo.send(new ChatServerStatus.stopping(), null);
597 stop();
598 replyTo.send(new ChatServerStatus.stopped(), null);
540 } 599 }
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 } 600 }
598 601
599 stop() { 602 stop() {
600 _server.close(); 603 _server.close();
601 _cleanupTimer.cancel(); 604 _cleanupTimer.cancel();
602 this.port.close(); 605 port.close();
603 } 606 }
604 607
605 String _host; 608 String _host;
606 int _port; 609 int _port;
607 HttpServer _server; // HTTP server instance. 610 HttpServer _server; // HTTP server instance.
608 bool _logRequests; 611 bool _logRequests;
609 612
610 Topic _topic; 613 Topic _topic;
611 Timer _cleanupTimer; 614 Timer _cleanupTimer;
612 Timer _loggingTimer; 615 Timer _loggingTimer;
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
679 } 682 }
680 } 683 }
681 684
682 int _timeRange; 685 int _timeRange;
683 List<int> _buckets; 686 List<int> _buckets;
684 int _currentBucket; 687 int _currentBucket;
685 int _currentBucketTime; 688 int _currentBucketTime;
686 num _bucketTimeRange; 689 num _bucketTimeRange;
687 int _sum; 690 int _sum;
688 } 691 }
OLDNEW
« no previous file with comments | « samples/chat/chat_server.dart ('k') | samples/dartcombat/player.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698