use channel to communicate instead of sync/atomic

This commit is contained in:
Dawid Wysokiński 2022-11-29 05:44:44 +01:00
parent b08ae16191
commit b14068cdea
Signed by: Kichiyaki
GPG Key ID: B5445E357FB8B892
1 changed files with 9 additions and 6 deletions

15
main.go
View File

@ -9,7 +9,6 @@ import (
"os/signal" "os/signal"
"strings" "strings"
"sync" "sync"
"sync/atomic"
"syscall" "syscall"
"time" "time"
) )
@ -37,7 +36,8 @@ func main() {
_ = cmd.Run() _ = cmd.Run()
}() }()
var isScreenSaverActive uint32 screenSaverCh := make(chan bool, 1)
defer close(screenSaverCh)
wg.Add(1) wg.Add(1)
go func() { go func() {
defer wg.Done() defer wg.Done()
@ -55,9 +55,9 @@ func main() {
continue continue
} }
if strings.Contains(scanner.Text(), "boolean true") { if strings.Contains(scanner.Text(), "boolean true") {
atomic.StoreUint32(&isScreenSaverActive, 1) screenSaverCh <- true
} else { } else {
atomic.StoreUint32(&isScreenSaverActive, 0) screenSaverCh <- false
} }
} }
} }
@ -67,14 +67,17 @@ func main() {
go func() { go func() {
defer wg.Done() defer wg.Done()
ticker := time.NewTicker(25 * time.Minute) isScreenSaverActive := false
ticker := time.NewTicker(30 * time.Minute)
defer ticker.Stop() defer ticker.Stop()
for { for {
select { select {
case <-ctx.Done(): case <-ctx.Done():
return return
case b := <-screenSaverCh:
isScreenSaverActive = b
case <-ticker.C: case <-ticker.C:
if atomic.LoadUint32(&isScreenSaverActive) == 1 { if isScreenSaverActive {
continue continue
} }
_ = sendNotification(ctx) _ = sendNotification(ctx)