| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 | 
							- package core
 
- import (
 
- 	"sync"
 
- 	"google.golang.org/grpc"
 
- )
 
- // ServiceRegistryCallback is a callback function for registering services.
 
- type ServiceRegistryCallback func(s *grpc.Server)
 
- // Commander is a feature that accepts commands from external source.
 
- type Commander interface {
 
- 	Feature
 
- 	// RegisterService registers a service into this Commander.
 
- 	RegisterService(ServiceRegistryCallback)
 
- }
 
- type syncCommander struct {
 
- 	sync.RWMutex
 
- 	Commander
 
- }
 
- func (c *syncCommander) RegisterService(callback ServiceRegistryCallback) {
 
- 	c.RLock()
 
- 	defer c.RUnlock()
 
- 	if c.Commander == nil {
 
- 		return
 
- 	}
 
- 	c.Commander.RegisterService(callback)
 
- }
 
- func (c *syncCommander) Start() error {
 
- 	c.RLock()
 
- 	defer c.RUnlock()
 
- 	if c.Commander == nil {
 
- 		return nil
 
- 	}
 
- 	return c.Commander.Start()
 
- }
 
- func (c *syncCommander) Close() error {
 
- 	c.RLock()
 
- 	defer c.RUnlock()
 
- 	if c.Commander == nil {
 
- 		return nil
 
- 	}
 
- 	return c.Commander.Close()
 
- }
 
- func (c *syncCommander) Set(commander Commander) {
 
- 	c.Lock()
 
- 	defer c.Unlock()
 
- 	c.Commander = commander
 
- }
 
 
  |