109 lines
2.3 KiB
Go
109 lines
2.3 KiB
Go
//go:build example
|
|
// +build example
|
|
|
|
//
|
|
// Do not build by default.
|
|
|
|
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"time"
|
|
|
|
"gobot.io/x/gobot/v2"
|
|
"gobot.io/x/gobot/v2/api"
|
|
)
|
|
|
|
func main() {
|
|
gbot := gobot.NewManager()
|
|
|
|
api.NewAPI(gbot).Start()
|
|
|
|
gbot.AddCommand("echo", func(params map[string]interface{}) interface{} {
|
|
return params["a"]
|
|
})
|
|
|
|
loopback := NewLoopbackAdaptor("/dev/null")
|
|
ping := NewPingDriver(loopback, "1")
|
|
|
|
work := func() {
|
|
gobot.Every(5*time.Second, func() {
|
|
fmt.Println(ping.Ping())
|
|
})
|
|
}
|
|
r := gobot.NewRobot("TestBot",
|
|
[]gobot.Connection{loopback},
|
|
[]gobot.Device{ping},
|
|
work,
|
|
)
|
|
|
|
r.AddCommand("hello", func(params map[string]interface{}) interface{} {
|
|
return fmt.Sprintf("Hello, %v!", params["greeting"])
|
|
})
|
|
|
|
gbot.AddRobot(r)
|
|
if err := gbot.Start(); err != nil {
|
|
fmt.Println(err)
|
|
}
|
|
}
|
|
|
|
var _ gobot.Adaptor = (*loopbackAdaptor)(nil)
|
|
|
|
type loopbackAdaptor struct {
|
|
name string
|
|
port string
|
|
}
|
|
|
|
func (t *loopbackAdaptor) Finalize() error { return nil }
|
|
func (t *loopbackAdaptor) Connect() error { return nil }
|
|
func (t *loopbackAdaptor) Name() string { return t.name }
|
|
func (t *loopbackAdaptor) SetName(n string) { t.name = n }
|
|
func (t *loopbackAdaptor) Port() string { return t.port }
|
|
|
|
func NewLoopbackAdaptor(port string) *loopbackAdaptor {
|
|
return &loopbackAdaptor{
|
|
name: "Loopback",
|
|
port: port,
|
|
}
|
|
}
|
|
|
|
var _ gobot.Driver = (*pingDriver)(nil)
|
|
|
|
type pingDriver struct {
|
|
name string
|
|
pin string
|
|
connection gobot.Connection
|
|
gobot.Eventer
|
|
gobot.Commander
|
|
}
|
|
|
|
func (t *pingDriver) Start() error { return nil }
|
|
func (t *pingDriver) Halt() error { return nil }
|
|
func (t *pingDriver) Name() string { return t.name }
|
|
func (t *pingDriver) SetName(n string) { t.name = n }
|
|
func (t *pingDriver) Pin() string { return t.pin }
|
|
func (t *pingDriver) Connection() gobot.Connection { return t.connection }
|
|
|
|
func NewPingDriver(adaptor *loopbackAdaptor, pin string) *pingDriver {
|
|
t := &pingDriver{
|
|
name: "Ping",
|
|
connection: adaptor,
|
|
pin: pin,
|
|
Eventer: gobot.NewEventer(),
|
|
Commander: gobot.NewCommander(),
|
|
}
|
|
|
|
t.AddEvent("ping")
|
|
|
|
t.AddCommand("ping", func(params map[string]interface{}) interface{} {
|
|
return t.Ping()
|
|
})
|
|
|
|
return t
|
|
}
|
|
|
|
func (t *pingDriver) Ping() string {
|
|
t.Publish(t.Event("ping"), "ping")
|
|
return "pong"
|
|
}
|