gobot: rename Master to Manager (#1070)
This commit is contained in:
parent
27d0b2164c
commit
c159228f48
22
CHANGELOG.md
22
CHANGELOG.md
|
@ -1183,7 +1183,7 @@
|
|||
|
||||
### core
|
||||
|
||||
* Add Running() methods for Master and Robot and increase test coverage accordingly
|
||||
* Add Running() methods for Manager and Robot and increase test coverage accordingly
|
||||
|
||||
### sysfs
|
||||
|
||||
|
@ -1647,9 +1647,9 @@
|
|||
### core
|
||||
|
||||
* Refactoring to allow 'Metal' development using Gobot packages
|
||||
* Able to run robots without being part of a Master.
|
||||
* Able to run robots without being part of a Manager.
|
||||
* Now running all work in separate goroutines
|
||||
* Rename internal name of Master type
|
||||
* Rename internal name of Manager type
|
||||
* Refactor events to use channels all the way down.
|
||||
* Eliminate potential race conditions from Events and Every functions
|
||||
* Add Unsubscribe() to Eventer, now Once() works as expected
|
||||
|
@ -1657,7 +1657,7 @@
|
|||
* Ranges over event channels instead of using select
|
||||
* No longer return non-standard slices of errors, instead use hashicorp/go-multierror
|
||||
* Ensure that all drivers have default names
|
||||
* Now both Robot and Master operate using AutoRun as expected
|
||||
* Now both Robot and Manager operate using AutoRun as expected
|
||||
* Use canonical import domain of gobot.io for all code
|
||||
* Use time.Sleep unless waiting for a timeout in a select
|
||||
* Uses time.NewTimer() instead of time.After() to be more efficient
|
||||
|
@ -2456,7 +2456,7 @@
|
|||
* Replaced ginkgo/gomega with system testing package
|
||||
* Refactor gobot/robot/device commands
|
||||
* Added Event type
|
||||
* Replaced Master type with Gobot type
|
||||
* Replaced Manager type with Gobot type
|
||||
* Every` and `After` now accept `time.Duration`
|
||||
* Removed reflection helper methods
|
||||
|
||||
|
@ -2580,7 +2580,7 @@
|
|||
* Finalize on SIGINT
|
||||
* Publish function for driver events
|
||||
* device test coverage
|
||||
* master and robot test coverage
|
||||
* manager and robot test coverage
|
||||
|
||||
### Clean
|
||||
|
||||
|
@ -2600,7 +2600,7 @@
|
|||
|
||||
### Refactor
|
||||
|
||||
* robot and master
|
||||
* robot and manager
|
||||
|
||||
### Remove
|
||||
|
||||
|
@ -2636,8 +2636,8 @@
|
|||
* Travis banner to README
|
||||
* api commands
|
||||
* POST command
|
||||
* master example
|
||||
* robot master
|
||||
* manager example
|
||||
* robot manager
|
||||
* Sphero example
|
||||
* Digispark to list of supported platforms
|
||||
* helper functions
|
||||
|
@ -2737,11 +2737,11 @@
|
|||
|
||||
### Rename
|
||||
|
||||
* Gobot struct to Master
|
||||
* Gobot struct to Manager
|
||||
|
||||
### Set
|
||||
|
||||
* GOMAXPROCS property in GobotMaster
|
||||
* GOMAXPROCS property in GobotManager
|
||||
|
||||
### Skeleton
|
||||
|
||||
|
|
44
README.md
44
README.md
|
@ -78,8 +78,8 @@ func main() {
|
|||
work := func() {
|
||||
gobot.Every(1*time.Second, func() {
|
||||
if err := led.Toggle(); err != nil {
|
||||
fmt.Println(err)
|
||||
}
|
||||
fmt.Println(err)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
|
@ -90,8 +90,8 @@ func main() {
|
|||
)
|
||||
|
||||
if err := robot.Start(); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
panic(err)
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
|
@ -148,26 +148,26 @@ import (
|
|||
func main() {
|
||||
e := edison.NewAdaptor()
|
||||
if err := e.Connect(); err != nil {
|
||||
fmt.Println(err)
|
||||
}
|
||||
fmt.Println(err)
|
||||
}
|
||||
|
||||
led := gpio.NewLedDriver(e, "13")
|
||||
if err := led.Start(); err != nil {
|
||||
fmt.Println(err)
|
||||
}
|
||||
fmt.Println(err)
|
||||
}
|
||||
|
||||
for {
|
||||
if err := led.Toggle(); err != nil {
|
||||
fmt.Println(err)
|
||||
}
|
||||
fmt.Println(err)
|
||||
}
|
||||
time.Sleep(1000 * time.Millisecond)
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### "Master" Gobot
|
||||
### "Manager" Gobot
|
||||
|
||||
You can also use the full capabilities of the framework aka "Master Gobot" to control swarms of robots or other features
|
||||
You can also use the full capabilities of the framework aka "Manager Gobot" to control swarms of robots or other features
|
||||
such as the built-in API server. For example:
|
||||
|
||||
```go
|
||||
|
@ -216,8 +216,8 @@ func NewSwarmBot(port string) *gobot.Robot {
|
|||
}
|
||||
|
||||
func main() {
|
||||
master := gobot.NewMaster()
|
||||
api.NewAPI(master).Start()
|
||||
manager := gobot.NewManager()
|
||||
api.NewAPI(manager).Start()
|
||||
|
||||
spheros := []string{
|
||||
"/dev/rfcomm0",
|
||||
|
@ -227,12 +227,12 @@ func main() {
|
|||
}
|
||||
|
||||
for _, port := range spheros {
|
||||
master.AddRobot(NewSwarmBot(port))
|
||||
manager.AddRobot(NewSwarmBot(port))
|
||||
}
|
||||
|
||||
if err := master.Start(); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
if err := manager.Start(); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
|
@ -416,15 +416,15 @@ device status, and execute device commands.
|
|||
To activate the API, import the `gobot.io/x/gobot/v2/api` package and instantiate the `API` like this:
|
||||
|
||||
```go
|
||||
master := gobot.NewMaster()
|
||||
api.NewAPI(master).Start()
|
||||
manager := gobot.NewManager()
|
||||
api.NewAPI(manager).Start()
|
||||
```
|
||||
|
||||
You can also specify the api host and port, and turn on authentication:
|
||||
|
||||
```go
|
||||
master := gobot.NewMaster()
|
||||
server := api.NewAPI(master)
|
||||
manager := gobot.NewManager()
|
||||
server := api.NewAPI(manager)
|
||||
server.Port = "4000"
|
||||
server.AddHandler(api.BasicAuth("gort", "klatuu"))
|
||||
server.Start()
|
||||
|
|
36
api/api.go
36
api/api.go
|
@ -17,7 +17,7 @@ import (
|
|||
|
||||
// API represents an API server
|
||||
type API struct {
|
||||
master *gobot.Master
|
||||
manager *gobot.Manager
|
||||
router *pat.PatternServeMux
|
||||
Host string
|
||||
Port string
|
||||
|
@ -28,11 +28,11 @@ type API struct {
|
|||
}
|
||||
|
||||
// NewAPI returns a new api instance
|
||||
func NewAPI(m *gobot.Master) *API {
|
||||
func NewAPI(m *gobot.Manager) *API {
|
||||
return &API{
|
||||
master: m,
|
||||
router: pat.New(),
|
||||
Port: "3000",
|
||||
manager: m,
|
||||
router: pat.New(),
|
||||
Port: "3000",
|
||||
start: func(a *API) {
|
||||
log.Println("Initializing API on " + a.Host + ":" + a.Port + "...")
|
||||
http.Handle("/", a)
|
||||
|
@ -196,20 +196,20 @@ func (a *API) robeaux(res http.ResponseWriter, req *http.Request) {
|
|||
// mcp returns MCP route handler.
|
||||
// Writes JSON with gobot representation
|
||||
func (a *API) mcp(res http.ResponseWriter, req *http.Request) {
|
||||
a.writeJSON(map[string]interface{}{"MCP": gobot.NewJSONMaster(a.master)}, res)
|
||||
a.writeJSON(map[string]interface{}{"MCP": gobot.NewJSONManager(a.manager)}, res)
|
||||
}
|
||||
|
||||
// mcpCommands returns commands route handler.
|
||||
// Writes JSON with global commands representation
|
||||
func (a *API) mcpCommands(res http.ResponseWriter, req *http.Request) {
|
||||
a.writeJSON(map[string]interface{}{"commands": gobot.NewJSONMaster(a.master).Commands}, res)
|
||||
a.writeJSON(map[string]interface{}{"commands": gobot.NewJSONManager(a.manager).Commands}, res)
|
||||
}
|
||||
|
||||
// robots returns route handler.
|
||||
// Writes JSON with robots representation
|
||||
func (a *API) robots(res http.ResponseWriter, req *http.Request) {
|
||||
jsonRobots := []*gobot.JSONRobot{}
|
||||
a.master.Robots().Each(func(r *gobot.Robot) {
|
||||
a.manager.Robots().Each(func(r *gobot.Robot) {
|
||||
jsonRobots = append(jsonRobots, gobot.NewJSONRobot(r))
|
||||
})
|
||||
a.writeJSON(map[string]interface{}{"robots": jsonRobots}, res)
|
||||
|
@ -238,7 +238,7 @@ func (a *API) robotCommands(res http.ResponseWriter, req *http.Request) {
|
|||
// robotDevices returns devices route handler.
|
||||
// Writes JSON with robot devices representation
|
||||
func (a *API) robotDevices(res http.ResponseWriter, req *http.Request) {
|
||||
if robot := a.master.Robot(req.URL.Query().Get(":robot")); robot != nil {
|
||||
if robot := a.manager.Robot(req.URL.Query().Get(":robot")); robot != nil {
|
||||
jsonDevices := []*gobot.JSONDevice{}
|
||||
robot.Devices().Each(func(d gobot.Device) {
|
||||
jsonDevices = append(jsonDevices, gobot.NewJSONDevice(d))
|
||||
|
@ -268,11 +268,11 @@ func (a *API) robotDeviceEvent(res http.ResponseWriter, req *http.Request) {
|
|||
res.Header().Set("Cache-Control", "no-cache")
|
||||
res.Header().Set("Connection", "keep-alive")
|
||||
|
||||
device := a.master.Robot(req.URL.Query().Get(":robot")).
|
||||
device := a.manager.Robot(req.URL.Query().Get(":robot")).
|
||||
Device(req.URL.Query().Get(":device"))
|
||||
|
||||
//nolint:forcetypeassert // no error return value, so there is no better way
|
||||
if event := a.master.Robot(req.URL.Query().Get(":robot")).
|
||||
if event := a.manager.Robot(req.URL.Query().Get(":robot")).
|
||||
Device(req.URL.Query().Get(":device")).(gobot.Eventer).
|
||||
Event(req.URL.Query().Get(":event")); len(event) > 0 {
|
||||
//nolint:forcetypeassert // no error return value, so there is no better way
|
||||
|
@ -314,7 +314,7 @@ func (a *API) robotDeviceCommands(res http.ResponseWriter, req *http.Request) {
|
|||
// writes JSON with robot connections representation
|
||||
func (a *API) robotConnections(res http.ResponseWriter, req *http.Request) {
|
||||
jsonConnections := []*gobot.JSONConnection{}
|
||||
if robot := a.master.Robot(req.URL.Query().Get(":robot")); robot != nil {
|
||||
if robot := a.manager.Robot(req.URL.Query().Get(":robot")); robot != nil {
|
||||
robot.Connections().Each(func(c gobot.Connection) {
|
||||
jsonConnections = append(jsonConnections, gobot.NewJSONConnection(c))
|
||||
})
|
||||
|
@ -336,7 +336,7 @@ func (a *API) robotConnection(res http.ResponseWriter, req *http.Request) {
|
|||
|
||||
// executeMcpCommand calls a global command associated to requested route
|
||||
func (a *API) executeMcpCommand(res http.ResponseWriter, req *http.Request) {
|
||||
a.executeCommand(a.master.Command(req.URL.Query().Get(":command")),
|
||||
a.executeCommand(a.manager.Command(req.URL.Query().Get(":command")),
|
||||
res,
|
||||
req,
|
||||
)
|
||||
|
@ -350,7 +350,7 @@ func (a *API) executeRobotDeviceCommand(res http.ResponseWriter, req *http.Reque
|
|||
} else {
|
||||
a.executeCommand(
|
||||
//nolint:forcetypeassert // no error return value, so there is no better way
|
||||
a.master.Robot(req.URL.Query().Get(":robot")).
|
||||
a.manager.Robot(req.URL.Query().Get(":robot")).
|
||||
Device(req.URL.Query().Get(":device")).(gobot.Commander).
|
||||
Command(req.URL.Query().Get(":command")),
|
||||
res,
|
||||
|
@ -365,7 +365,7 @@ func (a *API) executeRobotCommand(res http.ResponseWriter, req *http.Request) {
|
|||
a.writeJSON(map[string]interface{}{"error": err.Error()}, res)
|
||||
} else {
|
||||
a.executeCommand(
|
||||
a.master.Robot(req.URL.Query().Get(":robot")).
|
||||
a.manager.Robot(req.URL.Query().Get(":robot")).
|
||||
Command(req.URL.Query().Get(":command")),
|
||||
res,
|
||||
req,
|
||||
|
@ -410,14 +410,14 @@ func (a *API) Debug() {
|
|||
}
|
||||
|
||||
func (a *API) jsonRobotFor(name string) (*gobot.JSONRobot, error) {
|
||||
if robot := a.master.Robot(name); robot != nil {
|
||||
if robot := a.manager.Robot(name); robot != nil {
|
||||
return gobot.NewJSONRobot(robot), nil
|
||||
}
|
||||
return nil, fmt.Errorf("No Robot found with the name %s", name)
|
||||
}
|
||||
|
||||
func (a *API) jsonDeviceFor(robot string, name string) (*gobot.JSONDevice, error) {
|
||||
if device := a.master.Robot(robot).Device(name); device != nil {
|
||||
if device := a.manager.Robot(robot).Device(name); device != nil {
|
||||
return gobot.NewJSONDevice(device), nil
|
||||
}
|
||||
|
||||
|
@ -425,7 +425,7 @@ func (a *API) jsonDeviceFor(robot string, name string) (*gobot.JSONDevice, error
|
|||
}
|
||||
|
||||
func (a *API) jsonConnectionFor(robot string, name string) (*gobot.JSONConnection, error) {
|
||||
if connection := a.master.Robot(robot).Connection(name); connection != nil {
|
||||
if connection := a.manager.Robot(robot).Connection(name); connection != nil {
|
||||
return gobot.NewJSONConnection(connection), nil
|
||||
}
|
||||
|
||||
|
|
|
@ -19,7 +19,7 @@ import (
|
|||
|
||||
func initTestAPI() *API {
|
||||
log.SetOutput(NullReadWriteCloser{})
|
||||
g := gobot.NewMaster()
|
||||
g := gobot.NewManager()
|
||||
a := NewAPI(g)
|
||||
a.start = func(m *API) {}
|
||||
a.Start()
|
||||
|
@ -38,7 +38,7 @@ func initTestAPI() *API {
|
|||
|
||||
func TestStartWithoutDefaults(t *testing.T) {
|
||||
log.SetOutput(NullReadWriteCloser{})
|
||||
g := gobot.NewMaster()
|
||||
g := gobot.NewManager()
|
||||
a := NewAPI(g)
|
||||
a.start = func(m *API) {}
|
||||
|
||||
|
@ -396,13 +396,13 @@ func TestRobotDeviceEvent(t *testing.T) {
|
|||
respc <- resp
|
||||
}()
|
||||
|
||||
event := a.master.Robot("Robot1").
|
||||
event := a.manager.Robot("Robot1").
|
||||
Device("Device1").(gobot.Eventer).
|
||||
Event("TestEvent")
|
||||
|
||||
go func() {
|
||||
time.Sleep(time.Millisecond * 5)
|
||||
a.master.Robot("Robot1").
|
||||
a.manager.Robot("Robot1").
|
||||
Device("Device1").(gobot.Eventer).Publish(event, "event-data")
|
||||
}()
|
||||
|
||||
|
|
|
@ -13,14 +13,14 @@ Example:
|
|||
)
|
||||
|
||||
func main() {
|
||||
gbot := gobot.NewMaster()
|
||||
gbot := gobot.NewManager()
|
||||
|
||||
// Starts the API server on default port 3000
|
||||
api.NewAPI(gbot).Start()
|
||||
|
||||
// Accessible via http://localhost:3000/api/commands/say_hello
|
||||
gbot.AddCommand("say_hello", func(params map[string]interface{}) interface{} {
|
||||
return "Master says hello!"
|
||||
return "Manager says hello!"
|
||||
})
|
||||
|
||||
hello := gbot.AddRobot(gobot.NewRobot("Eve"))
|
||||
|
|
12
doc.go
12
doc.go
|
@ -76,9 +76,9 @@ pure idiomatic Golang code. For example:
|
|||
}
|
||||
}
|
||||
|
||||
# Master Gobot
|
||||
# Manager Gobot
|
||||
|
||||
Finally, you can use Master Gobot to add the complete Gobot API or control swarms of Robots:
|
||||
Finally, you can use Manager Gobot to add the complete Gobot API or control swarms of Robots:
|
||||
|
||||
package main
|
||||
|
||||
|
@ -125,8 +125,8 @@ Finally, you can use Master Gobot to add the complete Gobot API or control swarm
|
|||
}
|
||||
|
||||
func main() {
|
||||
master := gobot.NewMaster()
|
||||
api.NewAPI(master).Start()
|
||||
manager := gobot.NewManager()
|
||||
api.NewAPI(manager).Start()
|
||||
|
||||
spheros := []string{
|
||||
"/dev/rfcomm0",
|
||||
|
@ -136,10 +136,10 @@ Finally, you can use Master Gobot to add the complete Gobot API or control swarm
|
|||
}
|
||||
|
||||
for _, port := range spheros {
|
||||
master.AddRobot(NewSwarmBot(port))
|
||||
manager.AddRobot(NewSwarmBot(port))
|
||||
}
|
||||
|
||||
if err := master.Start(); err != nil {
|
||||
if err := manager.Start(); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -15,7 +15,7 @@ import (
|
|||
)
|
||||
|
||||
func main() {
|
||||
gbot := gobot.NewMaster()
|
||||
gbot := gobot.NewManager()
|
||||
|
||||
api.NewAPI(gbot).Start()
|
||||
|
||||
|
|
|
@ -53,15 +53,15 @@ func NewSwarmBot(port string) *gobot.Robot {
|
|||
}
|
||||
|
||||
func main() {
|
||||
master := gobot.NewMaster()
|
||||
api.NewAPI(master).Start()
|
||||
manager := gobot.NewManager()
|
||||
api.NewAPI(manager).Start()
|
||||
|
||||
for _, port := range os.Args[1:] {
|
||||
bot := NewSwarmBot(port)
|
||||
master.AddRobot(bot)
|
||||
manager.AddRobot(bot)
|
||||
}
|
||||
|
||||
if err := master.Start(); err != nil {
|
||||
if err := manager.Start(); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -71,15 +71,15 @@ func NewSwarmBot(port string) *gobot.Robot {
|
|||
}
|
||||
|
||||
func main() {
|
||||
master := gobot.NewMaster()
|
||||
api.NewAPI(master).Start()
|
||||
manager := gobot.NewManager()
|
||||
api.NewAPI(manager).Start()
|
||||
|
||||
for _, port := range os.Args[1:] {
|
||||
bot := NewSwarmBot(port)
|
||||
master.AddRobot(bot)
|
||||
manager.AddRobot(bot)
|
||||
}
|
||||
|
||||
if err := master.Start(); err != nil {
|
||||
if err := manager.Start(); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -47,15 +47,15 @@ func NewSwarmBot(port string) *gobot.Robot {
|
|||
}
|
||||
|
||||
func main() {
|
||||
master := gobot.NewMaster()
|
||||
api.NewAPI(master).Start()
|
||||
manager := gobot.NewManager()
|
||||
api.NewAPI(manager).Start()
|
||||
|
||||
for _, port := range os.Args[1:] {
|
||||
bot := NewSwarmBot(port)
|
||||
master.AddRobot(bot)
|
||||
manager.AddRobot(bot)
|
||||
}
|
||||
|
||||
if err := master.Start(); err != nil {
|
||||
if err := manager.Start(); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -14,8 +14,8 @@ import (
|
|||
)
|
||||
|
||||
func main() {
|
||||
master := gobot.NewMaster()
|
||||
api.NewAPI(master).Start()
|
||||
manager := gobot.NewManager()
|
||||
api.NewAPI(manager).Start()
|
||||
|
||||
digisparkAdaptor := digispark.NewAdaptor()
|
||||
led := gpio.NewLedDriver(digisparkAdaptor, "0")
|
||||
|
@ -25,9 +25,9 @@ func main() {
|
|||
[]gobot.Device{led},
|
||||
)
|
||||
|
||||
master.AddRobot(robot)
|
||||
manager.AddRobot(robot)
|
||||
|
||||
if err := master.Start(); err != nil {
|
||||
if err := manager.Start(); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -16,8 +16,8 @@ import (
|
|||
)
|
||||
|
||||
func main() {
|
||||
master := gobot.NewMaster()
|
||||
api.NewAPI(master).Start()
|
||||
manager := gobot.NewManager()
|
||||
api.NewAPI(manager).Start()
|
||||
|
||||
e := edison.NewAdaptor()
|
||||
|
||||
|
@ -43,9 +43,9 @@ func main() {
|
|||
work,
|
||||
)
|
||||
|
||||
master.AddRobot(robot)
|
||||
manager.AddRobot(robot)
|
||||
|
||||
if err := master.Start(); err != nil {
|
||||
if err := manager.Start(); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -17,8 +17,8 @@ import (
|
|||
)
|
||||
|
||||
func main() {
|
||||
master := gobot.NewMaster()
|
||||
a := api.NewAPI(master)
|
||||
manager := gobot.NewManager()
|
||||
a := api.NewAPI(manager)
|
||||
a.Start()
|
||||
|
||||
firmataAdaptor := firmata.NewAdaptor("/dev/ttyACM0")
|
||||
|
@ -38,9 +38,9 @@ func main() {
|
|||
work,
|
||||
)
|
||||
|
||||
master.AddRobot(robot)
|
||||
manager.AddRobot(robot)
|
||||
|
||||
if err := master.Start(); err != nil {
|
||||
if err := manager.Start(); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -88,16 +88,16 @@ func checkTravis(robot *gobot.Robot) {
|
|||
}
|
||||
|
||||
func main() {
|
||||
master := gobot.NewMaster()
|
||||
manager := gobot.NewManager()
|
||||
firmataAdaptor := firmata.NewAdaptor(os.Args[1])
|
||||
red := gpio.NewLedDriver(firmataAdaptor, "7", gpio.WithName("red"))
|
||||
green := gpio.NewLedDriver(firmataAdaptor, "6", gpio.WithName("green"))
|
||||
blue := gpio.NewLedDriver(firmataAdaptor, "5", gpio.WithName("blue"))
|
||||
|
||||
work := func() {
|
||||
checkTravis(master.Robot("travis"))
|
||||
checkTravis(manager.Robot("travis"))
|
||||
gobot.Every(10*time.Second, func() {
|
||||
checkTravis(master.Robot("travis"))
|
||||
checkTravis(manager.Robot("travis"))
|
||||
})
|
||||
}
|
||||
|
||||
|
@ -107,8 +107,8 @@ func main() {
|
|||
work,
|
||||
)
|
||||
|
||||
master.AddRobot(robot)
|
||||
if err := master.Start(); err != nil {
|
||||
manager.AddRobot(robot)
|
||||
if err := manager.Start(); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -16,27 +16,27 @@ import (
|
|||
)
|
||||
|
||||
func main() {
|
||||
master := gobot.NewMaster()
|
||||
manager := gobot.NewManager()
|
||||
|
||||
a := api.NewAPI(master)
|
||||
a := api.NewAPI(manager)
|
||||
a.AddHandler(func(w http.ResponseWriter, r *http.Request) {
|
||||
fmt.Fprintf(w, "Hello, %q \n", html.EscapeString(r.URL.Path))
|
||||
})
|
||||
a.Debug()
|
||||
a.Start()
|
||||
|
||||
master.AddCommand("custom_gobot_command",
|
||||
manager.AddCommand("custom_gobot_command",
|
||||
func(params map[string]interface{}) interface{} {
|
||||
return "This command is attached to the mcp!"
|
||||
})
|
||||
|
||||
hello := master.AddRobot(gobot.NewRobot("hello"))
|
||||
hello := manager.AddRobot(gobot.NewRobot("hello"))
|
||||
|
||||
hello.AddCommand("hi_there", func(params map[string]interface{}) interface{} {
|
||||
return fmt.Sprintf("This command is attached to the robot %v", hello.Name)
|
||||
})
|
||||
|
||||
if err := master.Start(); err != nil {
|
||||
if err := manager.Start(); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -16,9 +16,9 @@ import (
|
|||
)
|
||||
|
||||
func main() {
|
||||
master := gobot.NewMaster()
|
||||
manager := gobot.NewManager()
|
||||
|
||||
a := api.NewAPI(master)
|
||||
a := api.NewAPI(manager)
|
||||
a.AddHandler(api.BasicAuth("gort", "klatuu"))
|
||||
a.Debug()
|
||||
|
||||
|
@ -27,18 +27,18 @@ func main() {
|
|||
})
|
||||
a.Start()
|
||||
|
||||
master.AddCommand("custom_gobot_command",
|
||||
manager.AddCommand("custom_gobot_command",
|
||||
func(params map[string]interface{}) interface{} {
|
||||
return "This command is attached to the mcp!"
|
||||
})
|
||||
|
||||
hello := master.AddRobot(gobot.NewRobot("hello"))
|
||||
hello := manager.AddRobot(gobot.NewRobot("hello"))
|
||||
|
||||
hello.AddCommand("hi_there", func(params map[string]interface{}) interface{} {
|
||||
return fmt.Sprintf("This command is attached to the robot %v", hello.Name)
|
||||
})
|
||||
|
||||
if err := master.Start(); err != nil {
|
||||
if err := manager.Start(); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -15,9 +15,9 @@ import (
|
|||
)
|
||||
|
||||
func main() {
|
||||
master := gobot.NewMaster()
|
||||
manager := gobot.NewManager()
|
||||
|
||||
a := api.NewAPI(master)
|
||||
a := api.NewAPI(manager)
|
||||
|
||||
// creates routes/handlers for the custom API
|
||||
a.Get("/", func(res http.ResponseWriter, req *http.Request) {
|
||||
|
@ -26,7 +26,7 @@ func main() {
|
|||
}
|
||||
})
|
||||
a.Get("/api/hello", func(res http.ResponseWriter, req *http.Request) {
|
||||
msg := fmt.Sprintf("This command is attached to the robot %v", master.Robot("hello").Name)
|
||||
msg := fmt.Sprintf("This command is attached to the robot %v", manager.Robot("hello").Name)
|
||||
if _, err := res.Write([]byte(msg)); err != nil {
|
||||
fmt.Println(err)
|
||||
}
|
||||
|
@ -35,9 +35,9 @@ func main() {
|
|||
// starts the API without the default C2PIO API and Robeaux web interface.
|
||||
a.StartWithoutDefaults()
|
||||
|
||||
master.AddRobot(gobot.NewRobot("hello"))
|
||||
manager.AddRobot(gobot.NewRobot("hello"))
|
||||
|
||||
if err := master.Start(); err != nil {
|
||||
if err := manager.Start(); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -28,9 +28,9 @@ func main() {
|
|||
// parse args
|
||||
deviceID := os.Args[1]
|
||||
|
||||
master := gobot.NewMaster()
|
||||
manager := gobot.NewManager()
|
||||
|
||||
a := api.NewAPI(master)
|
||||
a := api.NewAPI(manager)
|
||||
|
||||
// add the standard C3PIO API routes manually.
|
||||
a.AddC3PIORoutes()
|
||||
|
@ -40,7 +40,7 @@ func main() {
|
|||
// means the REST API will be available, but not the web interface.
|
||||
a.StartWithoutDefaults()
|
||||
|
||||
hello := master.AddRobot(gobot.NewRobot("hello"))
|
||||
hello := manager.AddRobot(gobot.NewRobot("hello"))
|
||||
|
||||
hello.AddCommand("hi_there", func(params map[string]interface{}) interface{} {
|
||||
return fmt.Sprintf("This command is attached to the robot %v", hello.Name)
|
||||
|
@ -61,7 +61,7 @@ func main() {
|
|||
// start capturing
|
||||
go mjpegCapture()
|
||||
|
||||
if err := master.Start(); err != nil {
|
||||
if err := manager.Start(); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -25,8 +25,8 @@ import (
|
|||
)
|
||||
|
||||
func main() {
|
||||
master := gobot.NewMaster()
|
||||
api.NewAPI(master).Start()
|
||||
manager := gobot.NewManager()
|
||||
api.NewAPI(manager).Start()
|
||||
|
||||
core := particle.NewAdaptor(os.Args[1], os.Args[2])
|
||||
led := gpio.NewLedDriver(core, "D7")
|
||||
|
@ -45,9 +45,9 @@ func main() {
|
|||
work,
|
||||
)
|
||||
|
||||
master.AddRobot(robot)
|
||||
manager.AddRobot(robot)
|
||||
|
||||
if err := master.Start(); err != nil {
|
||||
if err := manager.Start(); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -15,8 +15,8 @@ import (
|
|||
)
|
||||
|
||||
func main() {
|
||||
master := gobot.NewMaster()
|
||||
api := api.NewAPI(master)
|
||||
manager := gobot.NewManager()
|
||||
api := api.NewAPI(manager)
|
||||
api.Port = "8080"
|
||||
api.Start()
|
||||
|
||||
|
@ -40,9 +40,9 @@ func main() {
|
|||
work,
|
||||
)
|
||||
|
||||
master.AddRobot(robot)
|
||||
manager.AddRobot(robot)
|
||||
|
||||
if err := master.Start(); err != nil {
|
||||
if err := manager.Start(); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -15,8 +15,8 @@ import (
|
|||
)
|
||||
|
||||
func main() {
|
||||
master := gobot.NewMaster()
|
||||
a := api.NewAPI(master)
|
||||
manager := gobot.NewManager()
|
||||
a := api.NewAPI(manager)
|
||||
a.Port = "8080"
|
||||
a.Start()
|
||||
|
||||
|
@ -35,9 +35,9 @@ func main() {
|
|||
work,
|
||||
)
|
||||
|
||||
master.AddRobot(robot)
|
||||
manager.AddRobot(robot)
|
||||
|
||||
if err := master.Start(); err != nil {
|
||||
if err := manager.Start(); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -14,8 +14,8 @@ import (
|
|||
)
|
||||
|
||||
func main() {
|
||||
master := gobot.NewMaster()
|
||||
api.NewAPI(master).Start()
|
||||
manager := gobot.NewManager()
|
||||
api.NewAPI(manager).Start()
|
||||
|
||||
spheros := map[string]string{
|
||||
"Sphero-BPO": "/dev/rfcomm0",
|
||||
|
@ -39,10 +39,10 @@ func main() {
|
|||
return nil
|
||||
})
|
||||
|
||||
master.AddRobot(robot)
|
||||
manager.AddRobot(robot)
|
||||
}
|
||||
|
||||
if err := master.Start(); err != nil {
|
||||
if err := manager.Start(); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -15,8 +15,8 @@ import (
|
|||
)
|
||||
|
||||
func main() {
|
||||
master := gobot.NewMaster()
|
||||
a := api.NewAPI(master)
|
||||
manager := gobot.NewManager()
|
||||
a := api.NewAPI(manager)
|
||||
a.Start()
|
||||
|
||||
ballConn := serialport.NewAdaptor("/dev/rfcomm0")
|
||||
|
@ -62,9 +62,9 @@ func main() {
|
|||
work,
|
||||
)
|
||||
|
||||
master.AddRobot(robot)
|
||||
manager.AddRobot(robot)
|
||||
|
||||
if err := master.Start(); err != nil {
|
||||
if err := manager.Start(); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -25,7 +25,7 @@ type conway struct {
|
|||
}
|
||||
|
||||
func main() {
|
||||
master := gobot.NewMaster()
|
||||
manager := gobot.NewManager()
|
||||
|
||||
spheros := []string{
|
||||
"/dev/rfcomm0",
|
||||
|
@ -67,10 +67,10 @@ func main() {
|
|||
work,
|
||||
)
|
||||
|
||||
master.AddRobot(robot)
|
||||
manager.AddRobot(robot)
|
||||
}
|
||||
|
||||
if err := master.Start(); err != nil {
|
||||
if err := manager.Start(); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -16,8 +16,8 @@ import (
|
|||
)
|
||||
|
||||
func main() {
|
||||
master := gobot.NewMaster()
|
||||
a := api.NewAPI(master)
|
||||
manager := gobot.NewManager()
|
||||
a := api.NewAPI(manager)
|
||||
a.Start()
|
||||
|
||||
conn := serialport.NewAdaptor("/dev/rfcomm0")
|
||||
|
@ -47,9 +47,9 @@ func main() {
|
|||
return "ok"
|
||||
})
|
||||
|
||||
master.AddRobot(robot)
|
||||
manager.AddRobot(robot)
|
||||
|
||||
if err := master.Start(); err != nil {
|
||||
if err := manager.Start(); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -15,7 +15,7 @@ import (
|
|||
)
|
||||
|
||||
func main() {
|
||||
master := gobot.NewMaster()
|
||||
manager := gobot.NewManager()
|
||||
|
||||
spheros := map[string]string{
|
||||
"Sphero-BPO": "/dev/rfcomm0",
|
||||
|
@ -35,13 +35,13 @@ func main() {
|
|||
work,
|
||||
)
|
||||
|
||||
master.AddRobot(robot)
|
||||
manager.AddRobot(robot)
|
||||
}
|
||||
|
||||
robot := gobot.NewRobot("",
|
||||
func() {
|
||||
gobot.Every(1*time.Second, func() {
|
||||
sphero := master.Robot("Sphero-BPO").Device("sphero").(*sphero.SpheroDriver)
|
||||
sphero := manager.Robot("Sphero-BPO").Device("sphero").(*sphero.SpheroDriver)
|
||||
sphero.SetRGB(uint8(gobot.Rand(255)),
|
||||
uint8(gobot.Rand(255)),
|
||||
uint8(gobot.Rand(255)),
|
||||
|
@ -50,9 +50,9 @@ func main() {
|
|||
},
|
||||
)
|
||||
|
||||
master.AddRobot(robot)
|
||||
manager.AddRobot(robot)
|
||||
|
||||
if err := master.Start(); err != nil {
|
||||
if err := manager.Start(); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -50,8 +50,8 @@ func NewSwarmBot(port string) *gobot.Robot {
|
|||
}
|
||||
|
||||
func main() {
|
||||
master := gobot.NewMaster()
|
||||
api.NewAPI(master).Start()
|
||||
manager := gobot.NewManager()
|
||||
api.NewAPI(manager).Start()
|
||||
|
||||
spheros := []string{
|
||||
"/dev/rfcomm0",
|
||||
|
@ -61,10 +61,10 @@ func main() {
|
|||
}
|
||||
|
||||
for _, port := range spheros {
|
||||
master.AddRobot(NewSwarmBot(port))
|
||||
manager.AddRobot(NewSwarmBot(port))
|
||||
}
|
||||
|
||||
if err := master.Start(); err != nil {
|
||||
if err := manager.Start(); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -17,8 +17,8 @@ import (
|
|||
)
|
||||
|
||||
func main() {
|
||||
master := gobot.NewMaster()
|
||||
a := api.NewAPI(master)
|
||||
manager := gobot.NewManager()
|
||||
a := api.NewAPI(manager)
|
||||
a.Start()
|
||||
|
||||
board := edison.NewAdaptor()
|
||||
|
@ -103,9 +103,9 @@ func main() {
|
|||
return enabled
|
||||
})
|
||||
|
||||
master.AddRobot(robot)
|
||||
manager.AddRobot(robot)
|
||||
|
||||
if err := master.Start(); err != nil {
|
||||
if err := manager.Start(); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -17,8 +17,8 @@ import (
|
|||
)
|
||||
|
||||
func main() {
|
||||
master := gobot.NewMaster()
|
||||
a := api.NewAPI(master)
|
||||
manager := gobot.NewManager()
|
||||
a := api.NewAPI(manager)
|
||||
a.Start()
|
||||
|
||||
board := edison.NewAdaptor()
|
||||
|
@ -103,9 +103,9 @@ func main() {
|
|||
return enabled
|
||||
})
|
||||
|
||||
master.AddRobot(robot)
|
||||
manager.AddRobot(robot)
|
||||
|
||||
if err := master.Start(); err != nil {
|
||||
if err := manager.Start(); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -6,15 +6,15 @@ import (
|
|||
"sync/atomic"
|
||||
)
|
||||
|
||||
// JSONMaster is a JSON representation of a Gobot Master.
|
||||
type JSONMaster struct {
|
||||
// JSONManager is a JSON representation of a Gobot Manager.
|
||||
type JSONManager struct {
|
||||
Robots []*JSONRobot `json:"robots"`
|
||||
Commands []string `json:"commands"`
|
||||
}
|
||||
|
||||
// NewJSONMaster returns a JSONMaster given a Gobot Master.
|
||||
func NewJSONMaster(gobot *Master) *JSONMaster {
|
||||
jsonGobot := &JSONMaster{
|
||||
// NewJSONManager returns a JSONManager given a Gobot Manager.
|
||||
func NewJSONManager(gobot *Manager) *JSONManager {
|
||||
jsonGobot := &JSONManager{
|
||||
Robots: []*JSONRobot{},
|
||||
Commands: []string{},
|
||||
}
|
||||
|
@ -29,9 +29,9 @@ func NewJSONMaster(gobot *Master) *JSONMaster {
|
|||
return jsonGobot
|
||||
}
|
||||
|
||||
// Master is the main type of your Gobot application and contains a collection of
|
||||
// Robots, API commands that apply to the Master, and Events that apply to the Master.
|
||||
type Master struct {
|
||||
// Manager is the main type of your Gobot application and contains a collection of
|
||||
// Robots, API commands that apply to the Manager, and Events that apply to the Manager.
|
||||
type Manager struct {
|
||||
robots *Robots
|
||||
trap func(chan os.Signal)
|
||||
AutoRun bool
|
||||
|
@ -40,9 +40,9 @@ type Master struct {
|
|||
Eventer
|
||||
}
|
||||
|
||||
// NewMaster returns a new Gobot Master
|
||||
func NewMaster() *Master {
|
||||
m := &Master{
|
||||
// NewManager returns a new Gobot Manager
|
||||
func NewManager() *Manager {
|
||||
m := &Manager{
|
||||
robots: &Robots{},
|
||||
trap: func(c chan os.Signal) {
|
||||
signal.Notify(c, os.Interrupt)
|
||||
|
@ -58,7 +58,7 @@ func NewMaster() *Master {
|
|||
// Start calls the Start method on each robot in its collection of robots. On
|
||||
// error, call Stop to ensure that all robots are returned to a sane, stopped
|
||||
// state.
|
||||
func (g *Master) Start() error {
|
||||
func (g *Manager) Start() error {
|
||||
if err := g.robots.Start(!g.AutoRun); err != nil {
|
||||
return err
|
||||
}
|
||||
|
@ -80,31 +80,31 @@ func (g *Master) Start() error {
|
|||
}
|
||||
|
||||
// Stop calls the Stop method on each robot in its collection of robots.
|
||||
func (g *Master) Stop() error {
|
||||
func (g *Manager) Stop() error {
|
||||
err := g.robots.Stop()
|
||||
g.running.Store(false)
|
||||
return err
|
||||
}
|
||||
|
||||
// Running returns if the Master is currently started or not
|
||||
func (g *Master) Running() bool {
|
||||
// Running returns if the Manager is currently started or not
|
||||
func (g *Manager) Running() bool {
|
||||
return g.running.Load().(bool) //nolint:forcetypeassert // no error return value, so there is no better way
|
||||
}
|
||||
|
||||
// Robots returns all robots associated with this Gobot Master.
|
||||
func (g *Master) Robots() *Robots {
|
||||
// Robots returns all robots associated with this Gobot Manager.
|
||||
func (g *Manager) Robots() *Robots {
|
||||
return g.robots
|
||||
}
|
||||
|
||||
// AddRobot adds a new robot to the internal collection of robots. Returns the
|
||||
// added robot
|
||||
func (g *Master) AddRobot(r *Robot) *Robot {
|
||||
func (g *Manager) AddRobot(r *Robot) *Robot {
|
||||
*g.robots = append(*g.robots, r)
|
||||
return r
|
||||
}
|
||||
|
||||
// Robot returns a robot given name. Returns nil if the Robot does not exist.
|
||||
func (g *Master) Robot(name string) *Robot {
|
||||
func (g *Manager) Robot(name string) *Robot {
|
||||
for _, robot := range *g.Robots() {
|
||||
if robot.Name == name {
|
||||
return robot
|
|
@ -13,9 +13,9 @@ import (
|
|||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
|
||||
func initTestMaster() *Master {
|
||||
func initTestManager() *Manager {
|
||||
log.SetOutput(&NullReadWriteCloser{})
|
||||
g := NewMaster()
|
||||
g := NewManager()
|
||||
g.trap = func(c chan os.Signal) {
|
||||
c <- os.Interrupt
|
||||
}
|
||||
|
@ -25,9 +25,9 @@ func initTestMaster() *Master {
|
|||
return g
|
||||
}
|
||||
|
||||
func initTestMaster1Robot() *Master {
|
||||
func initTestManager1Robot() *Manager {
|
||||
log.SetOutput(&NullReadWriteCloser{})
|
||||
g := NewMaster()
|
||||
g := NewManager()
|
||||
g.trap = func(c chan os.Signal) {
|
||||
c <- os.Interrupt
|
||||
}
|
||||
|
@ -45,8 +45,8 @@ func TestNullReadWriteCloser(t *testing.T) {
|
|||
require.NoError(t, n.Close())
|
||||
}
|
||||
|
||||
func TestMasterRobot(t *testing.T) {
|
||||
g := initTestMaster()
|
||||
func TestManagerRobot(t *testing.T) {
|
||||
g := initTestManager()
|
||||
assert.Equal(t, "Robot1", g.Robot("Robot1").Name)
|
||||
assert.Equal(t, (*Robot)(nil), g.Robot("Robot4"))
|
||||
assert.Equal(t, (Device)(nil), g.Robot("Robot4").Device("Device1"))
|
||||
|
@ -58,25 +58,25 @@ func TestMasterRobot(t *testing.T) {
|
|||
assert.Equal(t, 3, g.Robot("Robot1").Connections().Len())
|
||||
}
|
||||
|
||||
func TestMasterToJSON(t *testing.T) {
|
||||
g := initTestMaster()
|
||||
func TestManagerToJSON(t *testing.T) {
|
||||
g := initTestManager()
|
||||
g.AddCommand("test_function", func(params map[string]interface{}) interface{} {
|
||||
return nil
|
||||
})
|
||||
json := NewJSONMaster(g)
|
||||
json := NewJSONManager(g)
|
||||
assert.Len(t, json.Robots, g.Robots().Len())
|
||||
assert.Len(t, json.Commands, len(g.Commands()))
|
||||
}
|
||||
|
||||
func TestMasterStart(t *testing.T) {
|
||||
g := initTestMaster()
|
||||
func TestManagerStart(t *testing.T) {
|
||||
g := initTestManager()
|
||||
require.NoError(t, g.Start())
|
||||
require.NoError(t, g.Stop())
|
||||
assert.False(t, g.Running())
|
||||
}
|
||||
|
||||
func TestMasterStartAutoRun(t *testing.T) {
|
||||
g := NewMaster()
|
||||
func TestManagerStartAutoRun(t *testing.T) {
|
||||
g := NewManager()
|
||||
g.AddRobot(newTestRobot("Robot99"))
|
||||
go func() { _ = g.Start() }()
|
||||
time.Sleep(10 * time.Millisecond)
|
||||
|
@ -87,8 +87,8 @@ func TestMasterStartAutoRun(t *testing.T) {
|
|||
assert.False(t, g.Running())
|
||||
}
|
||||
|
||||
func TestMasterStartDriverErrors(t *testing.T) {
|
||||
g := initTestMaster1Robot()
|
||||
func TestManagerStartDriverErrors(t *testing.T) {
|
||||
g := initTestManager1Robot()
|
||||
e := errors.New("driver start error 1")
|
||||
testDriverStart = func() error {
|
||||
return e
|
||||
|
@ -105,8 +105,8 @@ func TestMasterStartDriverErrors(t *testing.T) {
|
|||
testDriverStart = func() error { return nil }
|
||||
}
|
||||
|
||||
func TestMasterHaltFromRobotDriverErrors(t *testing.T) {
|
||||
g := initTestMaster1Robot()
|
||||
func TestManagerHaltFromRobotDriverErrors(t *testing.T) {
|
||||
g := initTestManager1Robot()
|
||||
var ec int
|
||||
testDriverHalt = func() error {
|
||||
ec++
|
||||
|
@ -123,8 +123,8 @@ func TestMasterHaltFromRobotDriverErrors(t *testing.T) {
|
|||
assert.Equal(t, want, g.Start())
|
||||
}
|
||||
|
||||
func TestMasterStartRobotAdaptorErrors(t *testing.T) {
|
||||
g := initTestMaster1Robot()
|
||||
func TestManagerStartRobotAdaptorErrors(t *testing.T) {
|
||||
g := initTestManager1Robot()
|
||||
var ec int
|
||||
testAdaptorConnect = func() error {
|
||||
ec++
|
||||
|
@ -144,8 +144,8 @@ func TestMasterStartRobotAdaptorErrors(t *testing.T) {
|
|||
testAdaptorConnect = func() error { return nil }
|
||||
}
|
||||
|
||||
func TestMasterFinalizeErrors(t *testing.T) {
|
||||
g := initTestMaster1Robot()
|
||||
func TestManagerFinalizeErrors(t *testing.T) {
|
||||
g := initTestManager1Robot()
|
||||
var ec int
|
||||
testAdaptorFinalize = func() error {
|
||||
ec++
|
|
@ -29,8 +29,8 @@ import (
|
|||
)
|
||||
|
||||
func main() {
|
||||
master := gobot.NewMaster()
|
||||
api.NewAPI(master).Start()
|
||||
manager := gobot.NewManager()
|
||||
api.NewAPI(manager).Start()
|
||||
|
||||
pebbleAdaptor := pebble.NewAdaptor()
|
||||
watch := pebble.NewDriver(pebbleAdaptor)
|
||||
|
@ -52,11 +52,11 @@ func main() {
|
|||
work,
|
||||
)
|
||||
|
||||
master.AddRobot(robot)
|
||||
manager.AddRobot(robot)
|
||||
|
||||
if err := master.Start(); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
if err := manager.Start(); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}
|
||||
|
||||
```
|
||||
|
|
|
@ -24,8 +24,8 @@ your computer IP, robot name is 'pebble' and robot api port is 8080
|
|||
)
|
||||
|
||||
func main() {
|
||||
master := gobot.NewMaster()
|
||||
api.NewAPI(master).Start()
|
||||
manager := gobot.NewManager()
|
||||
api.NewAPI(manager).Start()
|
||||
|
||||
pebbleAdaptor := pebble.NewAdaptor()
|
||||
watch := pebble.NewDriver(pebbleAdaptor)
|
||||
|
@ -47,9 +47,9 @@ your computer IP, robot name is 'pebble' and robot api port is 8080
|
|||
work,
|
||||
)
|
||||
|
||||
master.AddRobot(robot)
|
||||
manager.AddRobot(robot)
|
||||
|
||||
if err := master.Start(); err != nil {
|
||||
if err := manager.Start(); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue