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

Side by Side Diff: mojo/dart/packages/mojo/lib/src/application_connection.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 unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 part of application; 5 part of application;
6 6
7 typedef void ServiceFactory(core.MojoMessagePipeEndpoint endpoint); 7 typedef void ServiceFactory(core.MojoMessagePipeEndpoint endpoint);
8 typedef void FallbackServiceFactory( 8 typedef void FallbackServiceFactory(
9 String interfaceName, core.MojoMessagePipeEndpoint endpoint); 9 String interfaceName, core.MojoMessagePipeEndpoint endpoint);
10 10
11 class LocalServiceProvider implements ServiceProvider { 11 class LocalServiceProvider implements ServiceProvider {
12 final ApplicationConnection connection; 12 final ApplicationConnection connection;
13 ServiceProviderStub _stub; 13 ServiceProviderStub _stub;
14 14
15 LocalServiceProvider(this.connection, this._stub) { 15 LocalServiceProvider(this.connection, this._stub) {
16 _stub.impl = this; 16 _stub.impl = this;
17 if (!_stub.isOpen) { 17 if (!_stub.isOpen) {
18 throw new core.MojoApiError("The service provider stub must be open"); 18 throw new core.MojoApiError("The service provider stub must be open");
19 } 19 }
20 } 20 }
21 21
22 set onError(Function f) { 22 set onError(Function f) {
23 _stub.onError = f; 23 _stub.onError = f;
24 } 24 }
25 25
26 Future close({bool immediate: false}) => _stub.close(immediate: immediate); 26 Future close({bool immediate: false}) => _stub.close(immediate: immediate);
27 27
28 void connectToService( 28 void connectToService_(
29 String interfaceName, core.MojoMessagePipeEndpoint pipe) { 29 String interfaceName, core.MojoMessagePipeEndpoint pipe) {
30 if (connection._nameToServiceFactory.containsKey(interfaceName)) { 30 if (connection._nameToServiceFactory.containsKey(interfaceName)) {
31 connection._nameToServiceFactory[interfaceName](pipe); 31 connection._nameToServiceFactory[interfaceName](pipe);
32 return; 32 return;
33 } 33 }
34 if (connection.fallbackServiceFactory != null) { 34 if (connection.fallbackServiceFactory != null) {
35 connection.fallbackServiceFactory(interfaceName, pipe); 35 connection.fallbackServiceFactory(interfaceName, pipe);
36 return; 36 return;
37 } 37 }
38 // The specified interface isn't provided. Close the pipe so the 38 // The specified interface isn't provided. Close the pipe so the
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
83 83
84 FallbackServiceFactory get fallbackServiceFactory => _fallbackServiceFactory; 84 FallbackServiceFactory get fallbackServiceFactory => _fallbackServiceFactory;
85 set fallbackServiceFactory(FallbackServiceFactory f) { 85 set fallbackServiceFactory(FallbackServiceFactory f) {
86 if (_localServiceProvider == null) { 86 if (_localServiceProvider == null) {
87 throw new core.MojoApiError( 87 throw new core.MojoApiError(
88 "There must be a local service provider to set a service factory"); 88 "There must be a local service provider to set a service factory");
89 } 89 }
90 _fallbackServiceFactory = f; 90 _fallbackServiceFactory = f;
91 } 91 }
92 92
93 bindings.ProxyBase requestService(bindings.ProxyBase proxy, 93 bindings.Proxy requestService(bindings.Proxy proxy,
94 [String serviceName]) { 94 [String serviceName]) {
95 if (proxy.impl.isBound || 95 if (proxy.ctrl.isBound ||
96 (remoteServiceProvider == null) || 96 (remoteServiceProvider == null) ||
97 !remoteServiceProvider.impl.isBound) { 97 !remoteServiceProvider.ctrl.isBound) {
98 throw new core.MojoApiError( 98 throw new core.MojoApiError(
99 "The proxy is bound, or there is no remove service provider proxy"); 99 "The proxy is bound, or there is no remove service provider proxy");
100 } 100 }
101 101
102 var name = serviceName ?? proxy.serviceName; 102 var name = serviceName ?? proxy.ctrl.serviceName;
103 if ((name == null) || name.isEmpty) { 103 if ((name == null) || name.isEmpty) {
104 throw new core.MojoApiError( 104 throw new core.MojoApiError(
105 "If an interface has no ServiceName, then one must be provided."); 105 "If an interface has no ServiceName, then one must be provided.");
106 } 106 }
107 107
108 var pipe = new core.MojoMessagePipe(); 108 var pipe = new core.MojoMessagePipe();
109 proxy.impl.bind(pipe.endpoints[0]); 109 proxy.ctrl.bind(pipe.endpoints[0]);
110 remoteServiceProvider.ptr.connectToService(name, pipe.endpoints[1]); 110 remoteServiceProvider.connectToService_(name, pipe.endpoints[1]);
111 return proxy; 111 return proxy;
112 } 112 }
113 113
114 /// Prepares this connection to provide the specified service when a call for 114 /// Prepares this connection to provide the specified service when a call for
115 /// the given [interfaceName] is received. The provided service can also 115 /// the given [interfaceName] is received. The provided service can also
116 /// choose to expose a service description. 116 /// choose to expose a service description.
117 void provideService(String interfaceName, ServiceFactory factory, 117 void provideService(String interfaceName, ServiceFactory factory,
118 {service_describer.ServiceDescription description}) { 118 {service_describer.ServiceDescription description}) {
119 if (_localServiceProvider == null) { 119 if (_localServiceProvider == null) {
120 throw new core.MojoApiError( 120 throw new core.MojoApiError(
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
160 } 160 }
161 if (_localServiceProvider != null) { 161 if (_localServiceProvider != null) {
162 lspCloseFuture = _localServiceProvider.close(immediate: immediate); 162 lspCloseFuture = _localServiceProvider.close(immediate: immediate);
163 _localServiceProvider = null; 163 _localServiceProvider = null;
164 } else { 164 } else {
165 lspCloseFuture = new Future.value(null); 165 lspCloseFuture = new Future.value(null);
166 } 166 }
167 return rspCloseFuture.then((_) => lspCloseFuture); 167 return rspCloseFuture.then((_) => lspCloseFuture);
168 } 168 }
169 } 169 }
OLDNEW
« no previous file with comments | « mojo/dart/packages/mojo/lib/src/application.dart ('k') | mojo/dart/packages/mojo/lib/src/codec.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698