loader logic revised

This commit is contained in:
IliaDenisov
2026-03-16 15:48:00 +02:00
parent cc7ecf6667
commit e6c6970947
13 changed files with 530 additions and 82 deletions
+34
View File
@@ -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)
}
}
}