diff --git a/src/board/board.go b/src/board/board.go index 3adf222..879fe99 100644 --- a/src/board/board.go +++ b/src/board/board.go @@ -11,11 +11,11 @@ var boardCreatorFunctions = make(map[string]BoardCreatorFunction) var AllChannels = make(map[string]Channel) -type BoardCreatorFunction func(*viper.Viper, string) Board +type BoardCreatorFunction func(*viper.Viper, string) *Board type onChannelUpdateFunction func(oldValue bool, c Channel) type Board interface { - Init() + Initialize() Dump() Channel(uint64) Channel } @@ -53,5 +53,6 @@ func CreateBoard(cfg *viper.Viper, key string) (Board, error) { if !ok { return nil, errors.New("Unknown board type") } - return createNewBoard(cfg, key), nil + + return *createNewBoard(cfg, key), nil } diff --git a/src/board/board_dummy.go b/src/board/board_dummy.go index 006639a..ef458dd 100644 --- a/src/board/board_dummy.go +++ b/src/board/board_dummy.go @@ -54,8 +54,8 @@ func newDummyChannel(v *viper.Viper, channelID string) DummyChannel { } } -func newDummyBoard(v *viper.Viper, id string) Board { - var b DummyBoard +func newDummyBoard(v *viper.Viper, id string) *Board { + var b *DummyBoard v.SetDefault("name", "board "+id) v.SetDefault("type", "dummy") @@ -68,7 +68,7 @@ func newDummyBoard(v *viper.Viper, id string) Board { } } - b = DummyBoard{ + b = &DummyBoard{ ID: id, Name: v.GetString("name"), ChannelCount: v.GetUint("channelCount"), @@ -82,7 +82,7 @@ func newDummyBoard(v *viper.Viper, id string) Board { channelid := strings.ToLower(channelid1) channelConfig := channelsConfig.Sub(channelid) c := newDummyChannel(channelConfig, channelid) - c.parent = &b + c.parent = b if c.Num >= v.GetUint("channelCount") { continue } @@ -92,8 +92,8 @@ func newDummyBoard(v *viper.Viper, id string) Board { } } b.channels = channels - - return b + var b1 Board = b + return &b1 } func (c *DummyChannel) Toggle() (bool, error) { @@ -163,11 +163,11 @@ func (b DummyBoard) Dump() { } } -func (b DummyBoard) Init() { +func (b DummyBoard) Initialize() { return } -func (b DummyBoard) Channel(num uint64) Channel { +func (b *DummyBoard) Channel(num uint64) Channel { return b.channels[num] } diff --git a/src/board/board_mqtt.go b/src/board/board_mqtt.go index 7b4f209..938ce3e 100644 --- a/src/board/board_mqtt.go +++ b/src/board/board_mqtt.go @@ -75,7 +75,7 @@ func newMQTTChannel(v *viper.Viper, channelID string) MQTTChannel { } } -func newMQTTBoard(v *viper.Viper, id string) Board { +func newMQTTBoard(v *viper.Viper, id string) *Board { var b MQTTBoard v.SetDefault("name", "board "+id) @@ -124,7 +124,8 @@ func newMQTTBoard(v *viper.Viper, id string) Board { } b.channels = channels - return b + var b1 Board = &b + return &b1 } func init() { @@ -208,7 +209,7 @@ func (b MQTTBoard) Dump() { } } -func (b MQTTBoard) Init() { +func (b *MQTTBoard) Initialize() { uri := b.MQTTRemoteSchema + "://" + b.MQTTRemoteHost + ":" + b.MQTTRemotePort opts := PahoMQTT.NewClientOptions().AddBroker(uri) @@ -300,7 +301,7 @@ func (c *MQTTChannel) MQTTHandler(client PahoMQTT.Client, msg PahoMQTT.Message) } } -func (b MQTTBoard) Channel(num uint64) Channel { +func (b *MQTTBoard) Channel(num uint64) Channel { return b.channels[num] } diff --git a/src/boards.go b/src/boards.go index d281e1e..3067dae 100644 --- a/src/boards.go +++ b/src/boards.go @@ -9,7 +9,7 @@ import ( var boards []*board.Board -func InitBoards() { +func CreateBoards() { // AllChannels = make(map[string]Channel) @@ -52,3 +52,11 @@ func InitBoards() { // } } + +func InitBoards() { + var b board.Board + for i := range boards { + b = *boards[i] + b.Initialize() + } +} diff --git a/src/main.go b/src/main.go index 34ac186..4b02eb0 100644 --- a/src/main.go +++ b/src/main.go @@ -12,8 +12,9 @@ func init() { } func main() { + CreateBoards() + CreateOutlets() InitBoards() - InitOutlets() MQTTSetup() go MQTTRefreshLoop() go ups.UpsConnect() diff --git a/src/outlets.go b/src/outlets.go index 143dd80..eacdf5d 100644 --- a/src/outlets.go +++ b/src/outlets.go @@ -11,7 +11,7 @@ import ( "github.com/spf13/viper" ) -func InitOutlets() { +func CreateOutlets() { outletsConfig := viper.Sub("outlets") if outletsConfig == nil {