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

Unified Diff: mojo/public/go/application/connection.go

Issue 2250183003: Make the fuchsia mojo/public repo the source of truth. (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: Created 4 years, 4 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/public/go/application/application_impl.go ('k') | mojo/public/go/application/describer.go » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: mojo/public/go/application/connection.go
diff --git a/mojo/public/go/application/connection.go b/mojo/public/go/application/connection.go
deleted file mode 100644
index 0c34fb9da63017361480b7e750ea5fb7bb709946..0000000000000000000000000000000000000000
--- a/mojo/public/go/application/connection.go
+++ /dev/null
@@ -1,223 +0,0 @@
-// Copyright 2015 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.
-
-package application
-
-import (
- "log"
-
- "mojo/public/go/bindings"
- "mojo/public/go/system"
-
- sp "mojo/public/interfaces/application/service_provider"
- "mojo/public/interfaces/bindings/service_describer"
-)
-
-type connectionInfo struct {
- requestorURL string
- connectionURL string
-}
-
-// RequestorURL returns the URL of application that established the connection.
-func (c *connectionInfo) RequestorURL() string {
- return c.requestorURL
-}
-
-// ConnectionURL returns the URL that was used by the source application to
-// establish a connection to the destination application.
-func (c *connectionInfo) ConnectionURL() string {
- return c.connectionURL
-}
-
-// ServiceRequest is an interface request for a specified mojo service.
-type ServiceRequest interface {
- // Name returns the name of requested mojo service.
- Name() string
-
- // ServiceDescription returns a service description, which can be queried to
- // examine the type information of the service associated with this
- // ServiceRequest.
- // Note: In some implementations, the ServiceDescription returned will not
- // provide type information. Methods called may return nil or an error.
- ServiceDescription() service_describer.ServiceDescription
-
- // PassMessagePipe passes ownership of the underlying message pipe
- // handle to the newly created handle object, invalidating the
- // underlying handle object in the process.
- PassMessagePipe() system.MessagePipeHandle
-}
-
-// ServiceFactory provides implementation of a mojo service.
-type ServiceFactory interface {
- // Name returns the name of provided mojo service.
- Name() string
-
- // ServiceDescription returns a service description, which can be queried to
- // examine the type information of the mojo service associated with this
- // ServiceFactory.
- // Note: In some implementations, the ServiceDescription returned will not
- // provide type information. Methods called may return nil or an error.
- ServiceDescription() service_describer.ServiceDescription
-
- // Create binds an implementation of mojo service to the provided
- // message pipe and runs it.
- Create(pipe system.MessagePipeHandle)
-}
-
-// Connection represents a connection to another application. An instance of
-// this struct is passed to Delegate's AcceptConnection() function each time a
-// connection is made to this application.
-// TODO(vtl): This is largely overkill now that we no longer have "wrong way"
-// service providers (a.k.a. "exposed services"). Things should be simplified.
-// https://github.com/domokit/mojo/issues/762
-type Connection struct {
- connectionInfo
- // Request for local services. Is valid until ProvideServices is called.
- servicesRequest *sp.ServiceProvider_Request
- // Indicates that ProvideServices function was already called.
- servicesProvided bool
- localServices *bindings.Stub
- outgoingConnection *OutgoingConnection
- isClosed bool
- // Is set if ProvideServicesWithDescriber was called.
- // Note: When DescribeServices is invoked, some implementations may return
- // incomplete ServiceDescriptions. For example, if type information was not
- // generated, then the methods called may return nil or an error.
- describer *ServiceDescriberFactory
-}
-
-func newConnection(requestorURL string, services sp.ServiceProvider_Request, resolvedURL string) *Connection {
- info := connectionInfo{
- requestorURL,
- resolvedURL,
- }
- return &Connection{
- connectionInfo: info,
- servicesRequest: &services,
- outgoingConnection: &OutgoingConnection{
- info,
- nil,
- },
- }
-}
-
-// ProvideServices starts a service provider on a separate goroutine that
-// provides given services to the remote application. Returns a pointer to
-// outgoing connection that can be used to connect to services provided by
-// remote application.
-// Panics if called more than once.
-func (c *Connection) ProvideServices(services ...ServiceFactory) *OutgoingConnection {
- if c.servicesProvided {
- panic("ProvideServices or ProvideServicesWithDescriber can be called only once")
- }
- c.servicesProvided = true
- if c.servicesRequest == nil {
- return c.outgoingConnection
- }
- if len(services) == 0 {
- c.servicesRequest.PassMessagePipe().Close()
- return c.outgoingConnection
- }
-
- provider := &serviceProviderImpl{
- make(map[string]ServiceFactory),
- }
- for _, service := range services {
- provider.AddService(service)
- }
- c.localServices = sp.NewServiceProviderStub(*c.servicesRequest, provider, bindings.GetAsyncWaiter())
- go func() {
- for {
- if err := c.localServices.ServeRequest(); err != nil {
- connectionError, ok := err.(*bindings.ConnectionError)
- if !ok || !connectionError.Closed() {
- log.Println(err)
- }
- break
- }
- }
- }()
- return c.outgoingConnection
-}
-
-// ProvideServicesWithDescriber is an alternative to ProvideServices that, in
-// addition to providing the given services, also provides type descriptions of
-// the given services. See ProvideServices for a description of what it does.
-// This method will invoke ProvideServices after appending the ServiceDescriber
-// service to |services|. See service_describer.mojom for a description of the
-// ServiceDescriber interface. Client Mojo applications can choose to connect
-// to this ServiceDescriber interface, which describes the other services listed
-// in |services|.
-// Note that the implementation of ServiceDescriber will make the optional
-// DeclarationData available on all types, and in particular, the names used in
-// .mojom files will be exposed to client applications.
-func (c *Connection) ProvideServicesWithDescriber(services ...ServiceFactory) *OutgoingConnection {
- if c.servicesProvided {
- panic("ProvideServices or ProvideServicesWithDescriber can be called only once")
- }
- mapping := make(map[string]service_describer.ServiceDescription)
- for _, service := range services {
- mapping[service.Name()] = service.ServiceDescription()
- }
- c.describer = newServiceDescriberFactory(mapping)
- servicesWithDescriber := append(services, &service_describer.ServiceDescriber_ServiceFactory{c.describer})
-
- return c.ProvideServices(servicesWithDescriber...)
-}
-
-// Close closes both incoming and outgoing parts of the connection.
-func (c *Connection) Close() {
- if c.servicesRequest != nil {
- c.servicesRequest.Close()
- }
- if c.localServices != nil {
- c.localServices.Close()
- }
- if c.describer != nil {
- c.describer.Close()
- }
- if c.outgoingConnection.remoteServices != nil {
- c.outgoingConnection.remoteServices.Close_Proxy()
- }
- c.isClosed = true
-}
-
-// OutgoingConnection represents outgoing part of connection to another
-// application. In order to close it close the |Connection| object that returned
-// this |OutgoingConnection|.
-type OutgoingConnection struct {
- connectionInfo
- remoteServices *sp.ServiceProvider_Proxy
-}
-
-// ConnectToService asks remote application to provide a service through the
-// message pipe endpoint supplied by the caller.
-func (c *OutgoingConnection) ConnectToService(request ServiceRequest) {
- pipe := request.PassMessagePipe()
- if c.remoteServices == nil {
- pipe.Close()
- return
- }
- c.remoteServices.ConnectToService(request.Name(), pipe)
-}
-
-// serviceProviderImpl is an implementation of mojo ServiceProvider interface.
-type serviceProviderImpl struct {
- factories map[string]ServiceFactory
-}
-
-// Mojo ServiceProvider implementation.
-func (sp *serviceProviderImpl) ConnectToService(name string, messagePipe system.MessagePipeHandle) error {
- factory, ok := sp.factories[name]
- if !ok {
- messagePipe.Close()
- return nil
- }
- factory.Create(messagePipe)
- return nil
-}
-
-func (sp *serviceProviderImpl) AddService(factory ServiceFactory) {
- sp.factories[factory.Name()] = factory
-}
« no previous file with comments | « mojo/public/go/application/application_impl.go ('k') | mojo/public/go/application/describer.go » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698