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

Side by Side Diff: dart/site/try/project_server.dart

Issue 224373003: Detect concurrent edits. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 6 years, 8 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 | « no previous file | dart/site/try/src/interaction_manager.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 trydart.projectServer; 5 library trydart.projectServer;
6 6
7 import 'dart:io'; 7 import 'dart:io';
8 8
9 import 'dart:async' show
10 Future;
11
9 import 'dart:convert' show 12 import 'dart:convert' show
10 HtmlEscape, 13 HtmlEscape,
11 JSON, 14 JSON,
12 UTF8; 15 UTF8;
13 16
14 class WatchHandler { 17 class WatchHandler {
15 final WebSocket socket; 18 final WebSocket socket;
16 19
17 final Set<String> watchedFiles; 20 final Set<String> watchedFiles;
18 21
19 static final Set<WatchHandler> handlers = new Set<WatchHandler>(); 22 static final Set<WatchHandler> handlers = new Set<WatchHandler>();
20 23
21 static const Map<int, String> fsEventNames = const <int, String>{ 24 static const Map<int, String> fsEventNames = const <int, String>{
22 FileSystemEvent.CREATE: 'create', 25 FileSystemEvent.CREATE: 'create',
23 FileSystemEvent.DELETE: 'delete', 26 FileSystemEvent.DELETE: 'delete',
24 FileSystemEvent.MODIFY: 'modify', 27 FileSystemEvent.MODIFY: 'modify',
25 FileSystemEvent.MOVE: 'move', 28 FileSystemEvent.MOVE: 'move',
26 }; 29 };
27 30
28 WatchHandler(this.socket, Iterable<String> watchedFiles) 31 WatchHandler(this.socket, Iterable<String> watchedFiles)
29 : this.watchedFiles = watchedFiles.toSet(); 32 : this.watchedFiles = watchedFiles.toSet();
30 33
31 handleFileSystemEvent(FileSystemEvent event) { 34 handleFileSystemEvent(FileSystemEvent event) {
32 String type = event.isDirectory ? 'directory' : 'file'; 35 if (event.isDirectory) return;
33 String eventType = fsEventNames[event.type]; 36 String type = fsEventNames[event.type];
34 if (eventType == null) eventType = 'unknown'; 37 if (type == null) type = 'unknown';
35 socket.add(JSON.encode({eventType: [event.path]})); 38 String path = new Uri.file(event.path).pathSegments.last;
39 shouldIgnore(type, path).then((bool ignored) {
40 if (ignored) return;
41 socket.add(JSON.encode({type: [path]}));
42 });
43 }
44
45 Future<bool> shouldIgnore(String type, String path) {
46 switch (type) {
47 case 'create':
48 return new Future<bool>.value(!watchedFiles.contains(path));
49 case 'delete':
50 return Conversation.listProjectFiles().then((List<String> files) {
51 watchedFiles
52 ..retainAll(files)
53 ..addAll(files);
54 return watchedFiles.contains(path);
55 });
56 case 'modify':
57 return new Future<bool>.value(false);
58 default:
59 print('Unhandled fs-event for $path ($type).');
60 return new Future<bool>.value(true);
61 }
36 } 62 }
37 63
38 onData(_) { 64 onData(_) {
39 // TODO(ahe): Move POST code here? 65 // TODO(ahe): Move POST code here?
40 } 66 }
41 67
42 onDone() { 68 onDone() {
43 handlers.remove(this); 69 handlers.remove(this);
44 } 70 }
45 71
(...skipping 379 matching lines...) Expand 10 before | Expand all | Expand 10 after
425 Conversation.packageRoot = Uri.base.resolve(arguments[4]); 451 Conversation.packageRoot = Uri.base.resolve(arguments[4]);
426 } 452 }
427 HttpServer.bind(host, port).then((HttpServer server) { 453 HttpServer.bind(host, port).then((HttpServer server) {
428 print('HTTP server started on http://$host:${server.port}/'); 454 print('HTTP server started on http://$host:${server.port}/');
429 server.listen(Conversation.onRequest, onError: Conversation.onError); 455 server.listen(Conversation.onRequest, onError: Conversation.onError);
430 }).catchError((e) { 456 }).catchError((e) {
431 print("HttpServer.bind error: $e"); 457 print("HttpServer.bind error: $e");
432 exit(1); 458 exit(1);
433 }); 459 });
434 } 460 }
OLDNEW
« no previous file with comments | « no previous file | dart/site/try/src/interaction_manager.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698