blob: 6de8ba6d9ee3f1c4c1570ea501dd3f9d55aadca4 [file] [log] [blame]
// Copyright 2017 The Fuchsia 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 service_provider_impl
import (
"syscall/zx"
)
type ServiceFactory interface {
// Name returns the name of provided fidl service.
Name() string
// Create binds an implementation of fidl service to the provided
// channel and runs it.
Create(h zx.Handle)
}
type ServiceProviderImpl struct {
factories map[string]ServiceFactory
}
func New() *ServiceProviderImpl {
return &ServiceProviderImpl{make(map[string]ServiceFactory)}
}
func (spi *ServiceProviderImpl) ConnectToService(name string, handle zx.Handle) error {
factory, ok := spi.factories[name]
if !ok {
handle.Close()
return nil
}
err := factory.Create(handle)
if err != nil {
return err
}
return nil
}
func (spi *ServiceProviderImpl) AddService(factory ServiceFactory) {
spi.factories[factory.Name()] = factory
}