loader logic revised
This commit is contained in:
@@ -0,0 +1,34 @@
|
||||
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)
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user