| // Copyright 2014 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| part of application; |
| |
| typedef core.Listener ListenerFactory(core.MojoMessagePipeEndpoint endpoint); |
| |
| class ServiceProvider extends service_provider.ServiceProvider { |
| ListenerFactory factory; |
| |
| service_provider.ServiceProviderProxy _proxy; |
| |
| ServiceProvider( |
| service_provider.ServiceProviderStub services, |
| [service_provider.ServiceProviderProxy exposedServices = null]) |
| : _proxy = exposedServices, |
| super.fromStub(services) { |
| delegate = this; |
| } |
| |
| connectToService(String interfaceName, core.MojoMessagePipeEndpoint pipe) => |
| factory(pipe).listen(); |
| |
| requestService(String name, bindings.Proxy clientImpl) { |
| assert(_proxy != null); |
| assert(!clientImpl.isBound); |
| var pipe = new core.MojoMessagePipe(); |
| clientImpl.bind(pipe.endpoints[0]); |
| _proxy.connectToService(name, pipe.endpoints[1]); |
| } |
| |
| close() { |
| if (_proxy != null) { |
| _proxy.close(); |
| _proxy = null; |
| } |
| } |
| } |