diff options
Diffstat (limited to 'cmd/mirumw/main.go')
| -rw-r--r-- | cmd/mirumw/main.go | 56 | +56 −0 |
1 files changed, 56 insertions, 0 deletions
diff --git a/cmd/mirumw/main.go b/cmd/mirumw/main.go new file mode 100644 --- /dev/null +++ b/cmd/mirumw/main.go @@ -0,0 +1,56 @@ +// Copyright (c) 2026 Nikolay Govorov +// SPDX-License-Identifier: AGPL-3.0-or-later + +package main + +import ( + "context" + "flag" + "log/slog" + "os" + + "dimidiumlabs/mirum/internal/protocol" + "dimidiumlabs/mirum/internal/supervisor" +) + +func main() { + configFile := flag.String("config", "", "path to config file") + flag.Parse() + + cfg, err := getConfig(*configFile) + if err != nil { + slog.Error("config", "err", err) + os.Exit(1) + } + + sup := supervisor.Detect() + ctx := sup.WaitForStop(context.Background()) + + sup.Ready() + go sup.StartWatchdog(ctx) + + backoff := protocol.NewBackoff() + + for ctx.Err() == nil { + c, err := dial(ctx, cfg) + if err != nil { + slog.Error("connect failed", "err", err) + if !backoff.Wait(ctx) { + break + } + continue + } + + slog.Info("connected", "server", cfg.Server) + backoff.Reset() + + if err := c.work(ctx); err != nil && ctx.Err() == nil { + slog.Error("work loop failed", "err", err) + } + + c.close() + } + + slog.Info("shutting down") + sup.Stopping() +} |
