gobot.io/x/gobot/v2@v2.1.0/examples/batty.go (about)

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