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

Unified Diff: sdk/lib/io/directory_impl.dart

Issue 24395013: Merge services into a shared IOService in dart:io, and use a native port. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Finish off native_service Created 7 years, 3 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « runtime/bin/socket_patch.dart ('k') | sdk/lib/io/file_impl.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: sdk/lib/io/directory_impl.dart
diff --git a/sdk/lib/io/directory_impl.dart b/sdk/lib/io/directory_impl.dart
index 61a226a56bb2979788867c6e8bfac51fd4915eb2..34a53dac351f5b23dd5081120b3a8c4a95b51e2c 100644
--- a/sdk/lib/io/directory_impl.dart
+++ b/sdk/lib/io/directory_impl.dart
@@ -15,7 +15,6 @@ class _Directory extends FileSystemEntity implements Directory {
static const RENAME_REQUEST = 7;
final String path;
- SendPort _directoryService;
_Directory(String this.path) {
if (path is! String) {
@@ -32,7 +31,6 @@ class _Directory extends FileSystemEntity implements Directory {
external static _deleteNative(String path, bool recursive);
external static _rename(String path, String newPath);
external static List _list(String path, bool recursive, bool followLinks);
- external static SendPort _newServicePort();
static Directory get current {
var result = _current();
@@ -54,11 +52,7 @@ class _Directory extends FileSystemEntity implements Directory {
}
Future<bool> exists() {
- _ensureDirectoryService();
- List request = new List(2);
- request[0] = EXISTS_REQUEST;
- request[1] = path;
- return _directoryService.call(request).then((response) {
+ return IOService.dispatch(DIRECTORY_EXISTS, [path]).then((response) {
if (_isErrorResponse(response)) {
throw _exceptionOrErrorFromResponse(response, "Exists failed");
}
@@ -133,11 +127,7 @@ class _Directory extends FileSystemEntity implements Directory {
Future<Directory> create({recursive: false}) {
if (recursive) return createRecursively();
- _ensureDirectoryService();
- List request = new List(2);
- request[0] = CREATE_REQUEST;
- request[1] = path;
- return _directoryService.call(request).then((response) {
+ return IOService.dispatch(DIRECTORY_CREATE, [path]).then((response) {
if (_isErrorResponse(response)) {
throw _exceptionOrErrorFromResponse(response, "Creation failed");
}
@@ -169,11 +159,7 @@ class _Directory extends FileSystemEntity implements Directory {
}
Future<Directory> createTemp() {
- _ensureDirectoryService();
- List request = new List(2);
- request[0] = CREATE_TEMP_REQUEST;
- request[1] = path;
- return _directoryService.call(request).then((response) {
+ return IOService.dispatch(DIRECTORY_CREATE_TEMP, [path]).then((response) {
if (_isErrorResponse(response)) {
throw _exceptionOrErrorFromResponse(
response, "Creation of temporary directory failed");
@@ -193,17 +179,13 @@ class _Directory extends FileSystemEntity implements Directory {
}
Future<Directory> _delete({recursive: false}) {
- _ensureDirectoryService();
- List request = new List(3);
- request[0] = DELETE_REQUEST;
- request[1] = path;
- request[2] = recursive;
- return _directoryService.call(request).then((response) {
- if (_isErrorResponse(response)) {
- throw _exceptionOrErrorFromResponse(response, "Deletion failed");
- }
- return this;
- });
+ return IOService.dispatch(DIRECTORY_DELETE, [path, recursive])
+ .then((response) {
+ if (_isErrorResponse(response)) {
+ throw _exceptionOrErrorFromResponse(response, "Deletion failed");
+ }
+ return this;
+ });
}
void _deleteSync({recursive: false}) {
@@ -214,17 +196,13 @@ class _Directory extends FileSystemEntity implements Directory {
}
Future<Directory> rename(String newPath) {
- _ensureDirectoryService();
- List request = new List(3);
- request[0] = RENAME_REQUEST;
- request[1] = path;
- request[2] = newPath;
- return _directoryService.call(request).then((response) {
- if (_isErrorResponse(response)) {
- throw _exceptionOrErrorFromResponse(response, "Rename failed");
- }
- return new Directory(newPath);
- });
+ return IOService.dispatch(DIRECTORY_RENAME, [path, newPath])
+ .then((response) {
+ if (_isErrorResponse(response)) {
+ throw _exceptionOrErrorFromResponse(response, "Rename failed");
+ }
+ return new Directory(newPath);
+ });
}
Directory renameSync(String newPath) {
@@ -275,12 +253,6 @@ class _Directory extends FileSystemEntity implements Directory {
return new Exception("Unknown error");
}
}
-
- void _ensureDirectoryService() {
- if (_directoryService == null) {
- _directoryService = _newServicePort();
- }
- }
}
class _AsyncDirectoryLister {
@@ -317,8 +289,7 @@ class _AsyncDirectoryLister {
Stream get stream => controller.stream;
void onListen() {
- var request = [_Directory.LIST_START_REQUEST, path, recursive, followLinks];
- _Directory._newServicePort().call(request)
+ IOService.dispatch(DIRECTORY_LIST_START, [path, recursive, followLinks])
.then((response) {
if (response is int) {
id = response;
@@ -351,46 +322,44 @@ class _AsyncDirectoryLister {
if (controller.isPaused) return;
assert(!nextRunning);
nextRunning = true;
- _Directory._newServicePort().call([_Directory.LIST_NEXT_REQUEST, id])
- .then((result) {
- if (result is List) {
- assert(result.length % 2 == 0);
- for (int i = 0; i < result.length; i++) {
- assert(i % 2 == 0);
- switch (result[i++]) {
- case LIST_FILE:
- controller.add(new File(result[i]));
- break;
- case LIST_DIRECTORY:
- controller.add(new Directory(result[i]));
- break;
- case LIST_LINK:
- controller.add(new Link(result[i]));
- break;
- case LIST_ERROR:
- error(result[i]);
- break;
- case LIST_DONE:
- close();
- return;
- }
- }
- } else {
- controller.addError(new DirectoryException("Internal error"));
+ IOService.dispatch(DIRECTORY_LIST_NEXT, [id]).then((result) {
+ if (result is List) {
+ assert(result.length % 2 == 0);
+ for (int i = 0; i < result.length; i++) {
+ assert(i % 2 == 0);
+ switch (result[i++]) {
+ case LIST_FILE:
+ controller.add(new File(result[i]));
+ break;
+ case LIST_DIRECTORY:
+ controller.add(new Directory(result[i]));
+ break;
+ case LIST_LINK:
+ controller.add(new Link(result[i]));
+ break;
+ case LIST_ERROR:
+ error(result[i]);
+ break;
+ case LIST_DONE:
+ close();
+ return;
}
- nextRunning = false;
- next();
- });
+ }
+ } else {
+ controller.addError(new DirectoryException("Internal error"));
+ }
+ nextRunning = false;
+ next();
+ });
}
void close() {
if (closed) return;
if (id == null) return;
closed = true;
- _Directory._newServicePort().call([_Directory.LIST_STOP_REQUEST, id])
- .then((_) {
- controller.close();
- });
+ IOService.dispatch(DIRECTORY_LIST_STOP, [id]).then((_) {
+ controller.close();
+ });
}
void error(message) {
« no previous file with comments | « runtime/bin/socket_patch.dart ('k') | sdk/lib/io/file_impl.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698