switch back to pointers, but this time add etl := etl when iterating over list to set correct pointer

This commit is contained in:
Sam Lewis
2023-01-13 21:57:08 -05:00
parent 18bab6f784
commit 447400868d
2 changed files with 12 additions and 9 deletions

18
app.go
View File

@@ -26,9 +26,9 @@ type App struct {
schedules pq.PriorityQueue schedules pq.PriorityQueue
intervals pq.PriorityQueue intervals pq.PriorityQueue
entityListeners map[string][]EntityListener entityListeners map[string][]*EntityListener
entityListenersId int64 entityListenersId int64
eventListeners map[string][]EventListener eventListeners map[string][]*EventListener
} }
/* /*
@@ -97,8 +97,8 @@ func NewApp(request NewAppRequest) *App {
state: state, state: state,
schedules: pq.New(), schedules: pq.New(),
intervals: pq.New(), intervals: pq.New(),
entityListeners: map[string][]EntityListener{}, entityListeners: map[string][]*EntityListener{},
eventListeners: map[string][]EventListener{}, eventListeners: map[string][]*EventListener{},
} }
} }
@@ -147,15 +147,16 @@ func (a *App) RegisterIntervals(intervals ...Interval) {
func (a *App) RegisterEntityListeners(etls ...EntityListener) { func (a *App) RegisterEntityListeners(etls ...EntityListener) {
for _, etl := range etls { for _, etl := range etls {
etl := etl
if etl.delay != 0 && etl.toState == "" { if etl.delay != 0 && etl.toState == "" {
log.Fatalln("EntityListener error: you have to use ToState() when using Duration()") log.Fatalln("EntityListener error: you have to use ToState() when using Duration()")
} }
for _, entity := range etl.entityIds { for _, entity := range etl.entityIds {
if elList, ok := a.entityListeners[entity]; ok { if elList, ok := a.entityListeners[entity]; ok {
a.entityListeners[entity] = append(elList, etl) a.entityListeners[entity] = append(elList, &etl)
} else { } else {
a.entityListeners[entity] = []EntityListener{etl} a.entityListeners[entity] = []*EntityListener{&etl}
} }
} }
} }
@@ -163,12 +164,13 @@ func (a *App) RegisterEntityListeners(etls ...EntityListener) {
func (a *App) RegisterEventListeners(evls ...EventListener) { func (a *App) RegisterEventListeners(evls ...EventListener) {
for _, evl := range evls { for _, evl := range evls {
evl := evl
for _, eventType := range evl.eventTypes { for _, eventType := range evl.eventTypes {
if elList, ok := a.eventListeners[eventType]; ok { if elList, ok := a.eventListeners[eventType]; ok {
a.eventListeners[eventType] = append(elList, evl) a.eventListeners[eventType] = append(elList, &evl)
} else { } else {
ws.SubscribeToEventType(eventType, a.conn, a.ctx) ws.SubscribeToEventType(eventType, a.conn, a.ctx)
a.eventListeners[eventType] = []EventListener{evl} a.eventListeners[eventType] = []*EventListener{&evl}
} }
} }
} }

View File

@@ -2,6 +2,7 @@ package gomeassistant
import ( import (
"fmt" "fmt"
"log"
"time" "time"
"github.com/golang-module/carbon" "github.com/golang-module/carbon"
@@ -130,7 +131,7 @@ func runSchedules(a *App) {
sched = popSchedule(a) sched = popSchedule(a)
} }
fmt.Println("Next schedule:", sched.nextRunTime) log.Println("Next schedule:", sched.nextRunTime)
time.Sleep(time.Until(sched.nextRunTime)) time.Sleep(time.Until(sched.nextRunTime))
sched.maybeRunCallback(a) sched.maybeRunCallback(a)
requeueSchedule(a, sched) requeueSchedule(a, sched)