Chromium Code Reviews| 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); |
|
Cutch
2016/05/12 17:24:27
Could 'close' and 'responseOrError' be dropped fro
zra
2016/05/12 18:22:42
Yes, however porting would be more difficult since
|
| + |
| + /// 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]); |
| -} |