Compare commits

...

3 Commits
v0.1.9 ... main

Author SHA1 Message Date
5fa75efee5 commit 2021-12-16]17:46:11 2021-12-16 17:46:13 +09:00
652d936d83 commit 2021-12-16]17:42:53 2021-12-16 17:42:57 +09:00
0f1e5e610e commit 2021-12-16]17:34:06 2021-12-16 17:34:08 +09:00
2 changed files with 10 additions and 8 deletions

2
cli.go
View File

@ -27,7 +27,7 @@ func init() {
devicesWithUUID: devWithUUID, devicesWithUUID: devWithUUID,
devicesWithIface: devWithIface, devicesWithIface: devWithIface,
chanForSync: chanForSync, chanForSync: chanForSync,
SyncListener: &SyncHandler{devices: devWithUUID, chanForSync: chanForSync, mutex: &sync.Mutex{}}, SyncListener: &SyncHandler{devices: devWithUUID, chanForSync: chanForSync, mutex: &sync.Mutex{}, states: map[string]map[string]interface{}{}},
RecvListener: &RecvHandler{devices: devWithIface, chanForSync: chanForSync}, RecvListener: &RecvHandler{devices: devWithIface, chanForSync: chanForSync},
} }

View File

@ -12,6 +12,7 @@ type SyncHandler struct {
devices map[string]*_device devices map[string]*_device
mutex *sync.Mutex mutex *sync.Mutex
chanForSync map[string]chan map[string]interface{} chanForSync map[string]chan map[string]interface{}
states map[string]map[string]interface{}
} }
func compareMap(src map[string]interface{}, dst map[string]interface{}) bool { func compareMap(src map[string]interface{}, dst map[string]interface{}) bool {
@ -29,14 +30,14 @@ func compareMap(src map[string]interface{}, dst map[string]interface{}) bool {
continue continue
} }
srcV, ok := value.(int) srcV, ok := value.(float64)
if !ok { if !ok {
srcV = int(value.(float64)) srcV = float64(value.(int))
} }
dstV, ok := dst[key].(int) dstV, ok := dst[key].(float64)
if !ok { if !ok {
dstV = int(dst[key].(float64)) dstV = float64(dst[key].(int))
} }
if srcV != dstV { if srcV != dstV {
@ -69,6 +70,7 @@ func (sh *SyncHandler) Handle(e Event) {
origin[key] = value origin[key] = value
} }
sh.states[device.UUID] = origin
// props := []string{"fan", "light", "servo"} // props := []string{"fan", "light", "servo"}
err := encoder.Encode(origin) err := encoder.Encode(origin)
@ -90,7 +92,7 @@ func (sh *SyncHandler) Handle(e Event) {
sh.mutex.Unlock() sh.mutex.Unlock()
for state := range chanForSync { for state := range chanForSync {
if compareMap(origin, state) { if compareMap(sh.states[device.UUID], state) {
sh.mutex.Lock() sh.mutex.Lock()
close(sh.chanForSync[device.IfaceName]) close(sh.chanForSync[device.IfaceName])
delete(sh.chanForSync, device.IfaceName) delete(sh.chanForSync, device.IfaceName)
@ -98,8 +100,8 @@ func (sh *SyncHandler) Handle(e Event) {
return return
} }
log.Println("wrong: ", state) log.Println("wrong: ", state)
log.Println("resend: ", origin) log.Println("resend: ", sh.states[device.UUID])
err := encoder.Encode(origin) err := encoder.Encode(sh.states[device.UUID])
if err != nil { if err != nil {
return return
} }