mirror of
https://github.com/ScuroNeko/mtg.git
synced 2026-08-31 22:54:01 +03:00
FILE / ScuroNeko/mtg
mtglib/internal/dc/updater.go
Исходный файл и его история в репозитории.
48 lines
670 B
Go
48 lines
670 B
Go
package dc
|
|
|
|
import (
|
|
"context"
|
|
"sync"
|
|
"time"
|
|
)
|
|
|
|
type updater struct {
|
|
wg sync.WaitGroup
|
|
logger Logger
|
|
period time.Duration
|
|
}
|
|
|
|
func (u *updater) Wait() {
|
|
u.wg.Wait()
|
|
}
|
|
|
|
func (u *updater) run(ctx context.Context, callback func() error) {
|
|
u.wg.Go(func() {
|
|
ticker := time.NewTicker(u.period)
|
|
|
|
defer func() {
|
|
ticker.Stop()
|
|
|
|
select {
|
|
case <-ticker.C:
|
|
default:
|
|
}
|
|
}()
|
|
|
|
for {
|
|
u.logger.Info("start update")
|
|
if err := callback(); err != nil {
|
|
u.logger.WarningError("cannot update", err)
|
|
}
|
|
u.logger.Info("updated")
|
|
|
|
select {
|
|
case <-ctx.Done():
|
|
u.logger.Info("stop updating")
|
|
return
|
|
case <-ticker.C:
|
|
}
|
|
}
|
|
})
|
|
}
|