35 lines
995 B
Go
35 lines
995 B
Go
package loader
|
|
|
|
import (
|
|
"context"
|
|
"time"
|
|
)
|
|
|
|
// backgroundLoop периодически проверяет доступность соединения и наличие новых версий на сервере
|
|
func (l *loader) backgroundLoop(ctx context.Context, stop <-chan struct{}) {
|
|
checkConnTimer := time.NewTimer(checkConnectionTimeout)
|
|
checkVersionTimer := time.NewTimer(checkVersionTimeout)
|
|
defer func() {
|
|
checkConnTimer.Stop()
|
|
checkVersionTimer.Stop()
|
|
}()
|
|
for {
|
|
select {
|
|
case <-ctx.Done():
|
|
l.client.Shutdown()
|
|
return
|
|
case <-stop:
|
|
return
|
|
case <-checkConnTimer.C:
|
|
isGood := l.connector.CheckConnection()
|
|
l.client.OnConnection(isGood)
|
|
checkConnTimer.Reset(checkConnectionTimeout)
|
|
case <-checkVersionTimer.C:
|
|
if err := l.checkAndDownloadPluginVersion(); err != nil {
|
|
l.onConnectionError(err) // TODO: separate error types for: onConnectionError / onStorageError / onServiceError
|
|
}
|
|
checkVersionTimer.Reset(checkVersionTimeout)
|
|
}
|
|
}
|
|
}
|