refactor generated name for robot, device and connection

This commit is contained in:
Adrian Zankich 2014-06-14 18:49:02 -07:00
parent daf6e328d5
commit 300a1e6812
4 changed files with 38 additions and 36 deletions

View File

@ -12,6 +12,7 @@ type AdaptorInterface interface {
Connect() bool
port() string
name() string
setName(string)
params() map[string]interface{}
}
@ -23,6 +24,10 @@ func (a *Adaptor) name() string {
return a.Name
}
func (a *Adaptor) setName(s string) {
a.Name = s
}
func (a *Adaptor) params() map[string]interface{} {
return a.Params
}

View File

@ -2,6 +2,7 @@ package gobot
import (
"errors"
"fmt"
"log"
"reflect"
)
@ -11,6 +12,7 @@ type Connection interface {
Finalize() bool
port() string
name() string
setName(string)
params() map[string]interface{}
}
@ -53,6 +55,9 @@ func (c connections) Finalize() {
}
func NewConnection(adaptor AdaptorInterface, r *Robot) *connection {
if adaptor.name() == "" {
adaptor.setName(fmt.Sprintf("%X", Rand(int(^uint(0)>>1))))
}
t := reflect.ValueOf(adaptor).Type().String()
return &connection{
Type: t[1:len(t)],
@ -90,6 +95,10 @@ func (c *connection) name() string {
return c.Name
}
func (c *connection) setName(s string) {
c.Name = s
}
func (c *connection) params() map[string]interface{} {
return c.Adaptor.params()
}

View File

@ -2,6 +2,7 @@ package gobot
import (
"errors"
"fmt"
"log"
"reflect"
"time"
@ -25,11 +26,10 @@ type JSONDevice struct {
}
type device struct {
Name string `json:"-"`
Type string `json:"-"`
Interval time.Duration `json:"-"`
Robot *Robot `json:"-"`
Driver DriverInterface `json:"-"`
Name string `json:"-"`
Type string `json:"-"`
Robot *Robot `json:"-"`
Driver DriverInterface `json:"-"`
}
type devices []*device
@ -56,6 +56,9 @@ func (d devices) Halt() {
}
func NewDevice(driver DriverInterface, r *Robot) *device {
if driver.name() == "" {
driver.setName(fmt.Sprintf("%X", Rand(int(^uint(0)>>1))))
}
t := reflect.ValueOf(driver).Type().String()
if driver.interval() == 0 {
driver.setInterval(10 * time.Millisecond)
@ -69,11 +72,11 @@ func NewDevice(driver DriverInterface, r *Robot) *device {
}
func (d *device) setInterval(t time.Duration) {
d.Interval = t
d.Driver.setInterval(t)
}
func (d *device) interval() time.Duration {
return d.Interval
return d.Driver.interval()
}
func (d *device) setName(s string) {

View File

@ -3,8 +3,6 @@ package gobot
import (
"fmt"
"log"
"math/rand"
"time"
)
type JSONRobot struct {
@ -37,25 +35,36 @@ func (r Robots) Each(f func(*Robot)) {
}
func NewRobot(name string, v ...interface{}) *Robot {
if name == "" {
name = fmt.Sprintf("%X", Rand(int(^uint(0)>>1)))
}
r := &Robot{
Name: name,
Commands: make(map[string]func(map[string]interface{}) interface{}),
connections: connections{},
devices: devices{},
}
r.initName()
log.Println("Initializing Robot", r.Name, "...")
if len(v) > 0 {
if v[0] == nil {
v[0] = []Connection{}
}
r.initConnections(v[0].([]Connection))
log.Println("Initializing connections...")
for _, connection := range v[0].([]Connection) {
c := r.AddConnection(connection)
log.Println("Initializing connection", c.name(), "...")
}
}
if len(v) > 1 {
if v[1] == nil {
v[1] = []Device{}
}
r.initDevices(v[1].([]Device))
log.Println("Initializing devices...")
for _, device := range v[1].([]Device) {
d := r.AddDevice(device)
log.Println("Initializing device", d.name(), "...")
}
}
if len(v) > 2 {
if v[2] == nil {
@ -96,30 +105,6 @@ func (r *Robot) Start() {
}
}
func (r *Robot) initName() {
if r.Name == "" {
rand.Seed(time.Now().UTC().UnixNano())
i := rand.Int()
r.Name = fmt.Sprintf("Robot%v", i)
}
}
func (r *Robot) initConnections(c []Connection) {
log.Println("Initializing connections...")
for _, connection := range c {
log.Println("Initializing connection", FieldByNamePtr(connection, "Name"), "...")
r.AddConnection(connection)
}
}
func (r *Robot) initDevices(d []Device) {
log.Println("Initializing devices...")
for _, device := range d {
log.Println("Initializing device", FieldByNamePtr(device, "Name"), "...")
r.AddDevice(device)
}
}
func (r *Robot) Devices() devices {
return devices(r.devices)
}