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

Unified Diff: client/samples/dartcombat/state.dart

Issue 8457005: convert isolates to use Future (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: updated co19 Created 9 years, 1 month 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 | « client/samples/dartcombat/player.dart ('k') | compiler/lib/implementation/isolate.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: client/samples/dartcombat/state.dart
diff --git a/client/samples/dartcombat/state.dart b/client/samples/dartcombat/state.dart
index 9ffbc9b122e93411741e78bc63c1ff94aba7b691..f2772d8fda336c1db16ffc3e9dd4f9028e2dea30 100644
--- a/client/samples/dartcombat/state.dart
+++ b/client/samples/dartcombat/state.dart
@@ -143,12 +143,13 @@ class PlayerState extends Isolate {
void singleShot(int x, int y) {
if (_canShoot(x, y)) {
_recordPendingShot(x, y);
- Promise<int> res = enemy.shoot(x, y); // async shot!
- res.addCompleteHandler((int result) {
+ Future<int> res = enemy.shoot(x, y); // async shot!
+ res.then((int result) {
_recordShotResult(result, x, y);
});
- res.addErrorHandler((String error) {
+ res.handleException((String error) {
_recordFailedShot(x, y);
+ return true;
});
}
}
@@ -161,16 +162,17 @@ class PlayerState extends Isolate {
void superShot(int x, int y, bool parallel) {
if (_canShoot(x, y)) {
_recordPendingShot(x, y);
- Promise<int> firstShot = enemy.shoot(x, y);
- firstShot.addCompleteHandler((int res) {
+ Future<int> firstShot = enemy.shoot(x, y);
+ firstShot.then((int res) {
_recordShotResult(res, x, y);
if (res == Constants.HIT) {
// no miss, but no sunk, search around
_exploreAllDirections(x, y, parallel);
}
});
- firstShot.addErrorHandler((String error) {
+ firstShot.handleException((String error) {
_recordFailedShot(x, y);
+ return true;
});
}
}
@@ -180,25 +182,27 @@ class PlayerState extends Isolate {
static final UP_DIR = const [0, -1];
static final DOWN_DIR = const [0, 1];
- Promise<bool> _exploreAllDirections(int x, int y, bool parallel) {
- Promise<bool> superShot = new Promise<bool>();
+ Future<bool> _exploreAllDirections(int x, int y, bool parallel) {
+ Completer<bool> superShot = new Completer<bool>();
if (parallel) {
- final arr = new List<Promise<bool>>();
+ final arr = new List<Future<bool>>();
arr.add(_exploreDirectionHelper(LEFT_DIR, x, y));
arr.add(_exploreDirectionHelper(RIGHT_DIR, x, y));
arr.add(_exploreDirectionHelper(UP_DIR, x, y));
arr.add(_exploreDirectionHelper(DOWN_DIR, x, y));
- superShot.waitFor(arr, 4);
+ Futures.wait(arr).then((arrValues) {
+ superShot.complete(true);
+ });
} else {
_seqExploreDirectionHelper(LEFT_DIR, x, y, superShot,
_seqExploreDirectionHelper(RIGHT_DIR, x, y, superShot,
_seqExploreDirectionHelper(UP_DIR, x, y, superShot,
_seqExploreDirectionHelper(DOWN_DIR, x, y, superShot, null))))(false);
}
- return superShot;
+ return superShot.future;
}
Function _seqExploreDirectionHelper(List<int> dir, int x, int y,
- Promise<bool> seq, void _next(bool res)) {
+ Completer<bool> seq, void _next(bool res)) {
return (bool res) {
if (res) {
seq.complete(true);
@@ -209,21 +213,21 @@ class PlayerState extends Isolate {
};
}
- Promise<bool> _exploreDirectionHelper(List<int> dir, int x, int y) {
- Promise<bool> sunk = new Promise<bool>();
+ Future<bool> _exploreDirectionHelper(List<int> dir, int x, int y) {
+ Completer<bool> sunk = new Completer<bool>();
_followDir(x + dir[0], y + dir[1], dir[0], dir[1], sunk);
- return sunk;
+ return sunk.future;
}
- void _followDir(int x, int y, int incX, int incY, Promise<bool> sunk) {
+ void _followDir(int x, int y, int incX, int incY, Completer<bool> sunk) {
if (_canShoot(x, y)) {
_recordPendingShot(x, y);
- Promise<int> shot = enemy.shoot(x, y);
- shot.addCompleteHandler((int res) {
+ Future<int> shot = enemy.shoot(x, y);
+ shot.then((int res) {
_recordShotResult(res, x, y);
switch (res) {
case Constants.HIT:
- if (!sunk.isDone() && !sunk.isCancelled()) {
+ if (!sunk.future.isComplete) {
_followDir(x + incX, y + incY, incX, incY, sunk);
}
break;
@@ -235,9 +239,10 @@ class PlayerState extends Isolate {
break;
}
});
- shot.addErrorHandler((String error) {
+ shot.handleException((String error) {
_recordFailedShot(x, y);
- sunk.fail(error);
+ sunk.completeException(error);
+ return true;
});
// We don't actually chain sunk.cancel with shot.cancel because individual
// shots can't be cancelled.
« no previous file with comments | « client/samples/dartcombat/player.dart ('k') | compiler/lib/implementation/isolate.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698