gobot.io/x/gobot@v1.16.0/examples/batty.go (about)

     1  // +build example
     2  //
     3  // Do not build by default.
     4  
     5  package main
     6  
     7  import (
     8  	"fmt"
     9  	"time"
    10  
    11  	"gobot.io/x/gobot"
    12  	"gobot.io/x/gobot/api"
    13  )
    14  
    15  func main() {
    16  	gbot := gobot.NewMaster()
    17  
    18  	api.NewAPI(gbot).Start()
    19  
    20  	gbot.AddCommand("echo", func(params map[string]interface{}) interface{} {
    21  		return params["a"]
    22  	})
    23  
    24  	loopback := NewLoopbackAdaptor("/dev/null")
    25  	ping := NewPingDriver(loopback, "1")
    26  
    27  	work := func() {
    28  		gobot.Every(5*time.Second, func() {
    29  			fmt.Println(ping.Ping())
    30  		})
    31  	}
    32  	r := gobot.NewRobot("TestBot",
    33  		[]gobot.Connection{loopback},
    34  		[]gobot.Device{ping},
    35  		work,
    36  	)
    37  
    38  	r.AddCommand("hello", func(params map[string]interface{}) interface{} {
    39  		return fmt.Sprintf("Hello, %v!", params["greeting"])
    40  	})
    41  
    42  	gbot.AddRobot(r)
    43  	gbot.Start()
    44  }
    45  
    46  var _ gobot.Adaptor = (*loopbackAdaptor)(nil)
    47  
    48  type loopbackAdaptor struct {
    49  	name string
    50  	port string
    51  }
    52  
    53  func (t *loopbackAdaptor) Finalize() (err error) { return }
    54  func (t *loopbackAdaptor) Connect() (err error)  { return }
    55  func (t *loopbackAdaptor) Name() string          { return t.name }
    56  func (t *loopbackAdaptor) SetName(n string)      { t.name = n }
    57  func (t *loopbackAdaptor) Port() string          { return t.port }
    58  
    59  func NewLoopbackAdaptor(port string) *loopbackAdaptor {
    60  	return &loopbackAdaptor{
    61  		name: "Loopback",
    62  		port: port,
    63  	}
    64  }
    65  
    66  var _ gobot.Driver = (*pingDriver)(nil)
    67  
    68  type pingDriver struct {
    69  	name       string
    70  	pin        string
    71  	connection gobot.Connection
    72  	gobot.Eventer
    73  	gobot.Commander
    74  }
    75  
    76  func (t *pingDriver) Start() (err error)           { return }
    77  func (t *pingDriver) Halt() (err error)            { return }
    78  func (t *pingDriver) Name() string                 { return t.name }
    79  func (t *pingDriver) SetName(n string)             { t.name = n }
    80  func (t *pingDriver) Pin() string                  { return t.pin }
    81  func (t *pingDriver) Connection() gobot.Connection { return t.connection }
    82  
    83  func NewPingDriver(adaptor *loopbackAdaptor, pin string) *pingDriver {
    84  	t := &pingDriver{
    85  		name:       "Ping",
    86  		connection: adaptor,
    87  		pin:        pin,
    88  		Eventer:    gobot.NewEventer(),
    89  		Commander:  gobot.NewCommander(),
    90  	}
    91  
    92  	t.AddEvent("ping")
    93  
    94  	t.AddCommand("ping", func(params map[string]interface{}) interface{} {
    95  		return t.Ping()
    96  	})
    97  
    98  	return t
    99  }
   100  
   101  func (t *pingDriver) Ping() string {
   102  	t.Publish(t.Event("ping"), "ping")
   103  	return "pong"
   104  }