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

Unified Diff: mojo/dart/packages/mojo/lib/src/proxy.dart

Issue 1964193002: Dart: Refactors Proxies (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Address comments Created 4 years, 7 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 | « mojo/dart/packages/mojo/lib/src/event_subscription.dart ('k') | mojo/dart/packages/mojo/sources.gni » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: mojo/dart/packages/mojo/lib/src/proxy.dart
diff --git a/mojo/dart/packages/mojo/lib/src/proxy.dart b/mojo/dart/packages/mojo/lib/src/proxy.dart
index 9ca4f13b79d26c448d7716993107a4f106314352..d1d6c0b15800f7238f819169125c3b8d60b1a253 100644
--- a/mojo/dart/packages/mojo/lib/src/proxy.dart
+++ b/mojo/dart/packages/mojo/lib/src/proxy.dart
@@ -4,13 +4,54 @@
part of bindings;
+/// The object that [ProxyMessageHandler.errorFuture] completes with when there
+/// is an error.
class ProxyError {
final String message;
ProxyError(this.message);
String toString() => "ProxyError: $message";
}
-abstract class Proxy extends core.MojoEventHandler {
+/// Generated ProxyControl classes implement this interface.
+/// ProxyControl objects are accessible through the [ctrl] field on Proxies.
+abstract class ProxyControl implements ProxyMessageHandler {
+ String get serviceName;
+}
+
+/// Generated Proxy classes extend this base class.
+class Proxy {
+ // In general it's probalby better to avoid adding fields and methods to this
+ // class. Names added to this class have to be mangled by Mojo bindings
+ // generation to avoid name conflicts.
+
+ /// Proxies control the ProxyMessageHandler by way of this [ProxyControl]
+ /// object.
+ final ProxyControl ctrl;
+
+ Proxy(this.ctrl);
+
+ /// This is a convenience method that simply forwards to ctrl.close().
+ /// If a Mojo interface has a method 'close', its name will be mangled to be
+ /// 'close_'.
+ Future close({bool immediate: false}) => ctrl.close(immediate: immediate);
+
+ /// This is a convenience method that simply forwards to
+ /// ctrl.responseOrError(). If a Mojo interface has a method
+ /// 'responseOrError', its name will be mangled to be 'responseOrError_'.
+ Future responseOrError(Future f) => ctrl.responseOrError(f);
+}
+
+/// Generated Proxy classes have a factory Proxy.connectToService which takes
+/// a ServiceConnector, a url, and optionally a service name and returns a
+/// bound Proxy. For example, every class extending the Application base class
+/// in package:mojo/application.dart inherits and implementation of the
+/// ServiceConnector interface.
+abstract class ServiceConnector {
+ /// Connects [proxy] to the service called [serviceName] that lives at [url].
+ void connectToService(String url, Proxy proxy, [String serviceName]);
+}
+
+class ProxyMessageHandler extends core.MojoEventHandler {
HashMap<int, Completer> _completerMap = new HashMap<int, Completer>();
Completer _errorCompleter = new Completer();
Set<Completer> _errorCompleters;
@@ -18,14 +59,18 @@ abstract class Proxy extends core.MojoEventHandler {
int _version = 0;
int _pendingCount = 0;
- Proxy.fromEndpoint(core.MojoMessagePipeEndpoint endpoint)
+ ProxyMessageHandler.fromEndpoint(core.MojoMessagePipeEndpoint endpoint)
: super.fromEndpoint(endpoint);
- Proxy.fromHandle(core.MojoHandle handle) : super.fromHandle(handle);
+ ProxyMessageHandler.fromHandle(core.MojoHandle handle)
+ : super.fromHandle(handle);
- Proxy.unbound() : super.unbound();
+ ProxyMessageHandler.unbound() : super.unbound();
- void handleResponse(ServiceMessage reader);
+ /// The function that handles responses to sent proxy message. It should be
+ /// implemented by the generated ProxyControl classes that extend
+ /// [ProxyMessageHandler].
+ void handleResponse(ServiceMessage msg) {}
/// If there is an error in using this proxy, this future completes with
/// a ProxyError.
@@ -40,6 +85,7 @@ abstract class Proxy extends core.MojoEventHandler {
/// Note: The description is null or incomplete if type info is unavailable.
service_describer.ServiceDescription get description => null;
+ @override
void handleRead() {
var result = endpoint.queryAndRead();
if ((result.data == null) || (result.dataLength == 0)) {
@@ -61,6 +107,7 @@ abstract class Proxy extends core.MojoEventHandler {
}
}
+ @override
void handleWrite() {
proxyError("Unexpected writable signal");
}
@@ -71,9 +118,9 @@ abstract class Proxy extends core.MojoEventHandler {
// complete.
_completerMap.clear();
- // Signal to any pending calls that the Proxy is closed.
+ // Signal to any pending calls that the ProxyMessageHandler is closed.
if (_pendingCount > 0) {
- proxyError("The Proxy is closed.");
+ proxyError("The ProxyMessageHandler is closed.");
}
return super.close(immediate: immediate);
@@ -81,7 +128,7 @@ abstract class Proxy extends core.MojoEventHandler {
void sendMessage(Struct message, int name) {
if (!isBound) {
- proxyError("The Proxy is closed.");
+ proxyError("The ProxyMessageHandler is closed.");
return;
}
if (!isOpen) {
@@ -99,7 +146,7 @@ abstract class Proxy extends core.MojoEventHandler {
Future sendMessageWithRequestId(Struct message, int name, int id, int flags) {
var completer = new Completer();
if (!isBound) {
- proxyError("The Proxy is closed.");
+ proxyError("The ProxyMessageHandler is closed.");
return completer.future;
}
if (!isOpen) {
@@ -128,7 +175,7 @@ abstract class Proxy extends core.MojoEventHandler {
String toString() {
var superString = super.toString();
- return "Proxy(${superString})";
+ return "ProxyMessageHandler(${superString})";
}
/// Queries the max version that the remote side supports.
@@ -186,7 +233,7 @@ abstract class Proxy extends core.MojoEventHandler {
/// Example usage:
///
/// try {
- /// result = await MyProxy.responseOrError(MyProxy.ptr.call(a,b,c));
+ /// result = await myProxy.responseOrError(myProxy.call(a,b,c));
/// } catch (e) {
/// ...
/// }
@@ -241,20 +288,3 @@ abstract class Proxy extends core.MojoEventHandler {
c.complete(response);
}
}
-
-/// Generated Proxy classes implement this interface.
-abstract class ProxyBase {
- final Proxy impl = null;
- final String serviceName = null;
- Object get ptr;
-}
-
-/// Generated Proxy classes have a factory Proxy.connectToService which takes
-/// a ServiceConnector, a url, and optionally a service name and returns a
-/// bound Proxy. For example, every class extending the Application base class
-/// in package:mojo/application.dart inherits and implementation of the
-/// ServiceConnector interface.
-abstract class ServiceConnector {
- /// Connects [proxy] to the service called [serviceName] that lives at [url].
- void connectToService(String url, ProxyBase proxy, [String serviceName]);
-}
« no previous file with comments | « mojo/dart/packages/mojo/lib/src/event_subscription.dart ('k') | mojo/dart/packages/mojo/sources.gni » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698