commander.go 594 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. package core
  2. import (
  3. "sync"
  4. )
  5. // Commander is a feature that accepts commands from external source.
  6. type Commander interface {
  7. Feature
  8. }
  9. type syncCommander struct {
  10. sync.RWMutex
  11. Commander
  12. }
  13. func (c *syncCommander) Start() error {
  14. c.RLock()
  15. defer c.RUnlock()
  16. if c.Commander == nil {
  17. return nil
  18. }
  19. return c.Commander.Start()
  20. }
  21. func (c *syncCommander) Close() error {
  22. c.RLock()
  23. defer c.RUnlock()
  24. if c.Commander == nil {
  25. return nil
  26. }
  27. return c.Commander.Close()
  28. }
  29. func (c *syncCommander) Set(commander Commander) {
  30. c.Lock()
  31. defer c.Unlock()
  32. c.Commander = commander
  33. }