diff options
| author | Jeff Halter <868228+jhalter@users.noreply.github.com> | 2021-07-29 08:42:33 -0700 |
|---|---|---|
| committer | Jeff Halter <868228+jhalter@users.noreply.github.com> | 2021-07-29 08:42:33 -0700 |
| commit | 0c0b2680077c1103609c87a652bcc2263460b1d7 (patch) | |
| tree | 9968655a20d3caec9077b49db2473cbdb344cb71 /cmd/mobius-hotline-client | |
| parent | 95753255a17026750f5b53cc470999785e0c515f (diff) | |
Re-organize cmd paths
Diffstat (limited to 'cmd/mobius-hotline-client')
| -rw-r--r-- | cmd/mobius-hotline-client/main.go | 114 | ||||
| -rw-r--r-- | cmd/mobius-hotline-client/mobius-client-config.yaml | 8 | ||||
| -rw-r--r-- | cmd/mobius-hotline-client/mobius-hotline-server.service | 13 |
3 files changed, 135 insertions, 0 deletions
diff --git a/cmd/mobius-hotline-client/main.go b/cmd/mobius-hotline-client/main.go new file mode 100644 index 0000000..ec6f895 --- /dev/null +++ b/cmd/mobius-hotline-client/main.go @@ -0,0 +1,114 @@ +package main + +import ( + "context" + "flag" + "fmt" + "github.com/jhalter/mobius/hotline" + "github.com/rivo/tview" + "go.uber.org/zap" + "go.uber.org/zap/zapcore" + "log" + "os" + "os/signal" + "runtime" + "syscall" +) + +func main() { + _, cancelRoot := context.WithCancel(context.Background()) + + sigChan := make(chan os.Signal, 1) + signal.Notify(sigChan, syscall.SIGTERM, syscall.SIGINT, os.Interrupt) + + version := flag.Bool("version", false, "print version and exit") + logLevel := flag.String("log-level", "info", "Log level") + logFile := flag.String("log-file", "", "output logs to file") + + flag.Parse() + + if *version { + fmt.Printf("v%s\n", hotline.VERSION) + os.Exit(0) + } + + zapLvl, ok := zapLogLevel[*logLevel] + if !ok { + fmt.Printf("Invalid log level %s. Must be debug, info, warn, or error.\n", *logLevel) + os.Exit(0) + } + + // init DebugBuffer + db := &hotline.DebugBuffer{ + TextView: tview.NewTextView(), + } + + cores := []zapcore.Core{newZapCore(zapLvl, db)} + + // Add file logger if optional log-file flag was passed + if *logFile != "" { + f, err := os.OpenFile(*logFile, + os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644) + if err != nil { + log.Println(err) + } + defer f.Close() + if err != nil { + panic(err) + } + cores = append(cores, newZapCore(zapLvl, f)) + } + + l := zap.New(zapcore.NewTee(cores...)) + defer func() { _ = l.Sync() }() + logger := l.Sugar() + logger.Infow("Started Mobius client", "Version", hotline.VERSION) + + go func() { + sig := <-sigChan + logger.Infow("Stopping client", "signal", sig.String()) + cancelRoot() + }() + + cfgPath := defaultConfigPath() + + client := hotline.NewClient(cfgPath, logger) + client.DebugBuf = db + client.UI.Start() + +} + +func newZapCore(level zapcore.Level, syncer zapcore.WriteSyncer) zapcore.Core { + encoderCfg := zap.NewProductionEncoderConfig() + encoderCfg.TimeKey = "timestamp" + encoderCfg.EncodeTime = zapcore.ISO8601TimeEncoder + + return zapcore.NewCore( + zapcore.NewConsoleEncoder(encoderCfg), + zapcore.Lock(syncer), + level, + ) +} + +var zapLogLevel = map[string]zapcore.Level{ + "debug": zap.DebugLevel, + "info": zap.InfoLevel, + "warn": zap.WarnLevel, + "error": zap.ErrorLevel, +} + +func defaultConfigPath() (cfgPath string) { + os := runtime.GOOS + switch os { + case "windows": + cfgPath = "mobius-client-config.yaml" + case "darwin": + cfgPath = "/usr/local/etc/mobius-client-config.yaml" + case "linux": + cfgPath = "/usr/local/etc/mobius-client-config.yaml" + default: + fmt.Printf("unsupported OS") + } + + return cfgPath +} diff --git a/cmd/mobius-hotline-client/mobius-client-config.yaml b/cmd/mobius-hotline-client/mobius-client-config.yaml new file mode 100644 index 0000000..978122b --- /dev/null +++ b/cmd/mobius-hotline-client/mobius-client-config.yaml @@ -0,0 +1,8 @@ +Username: unnamed +IconID: 414 +Tracker: hltracker.com:5498 +Bookmarks: + - Name: Example Server + Addr: localhost:5500 + Login: guest + Password: ""
\ No newline at end of file diff --git a/cmd/mobius-hotline-client/mobius-hotline-server.service b/cmd/mobius-hotline-client/mobius-hotline-server.service new file mode 100644 index 0000000..ec2437c --- /dev/null +++ b/cmd/mobius-hotline-client/mobius-hotline-server.service @@ -0,0 +1,13 @@ +[Unit] +Description=Mobius Server +After=network.target +StartLimitIntervalSec=0 + +[Service] +Type=simple +Restart=always +RestartSec=1 +ExecStart=/usr/local/bin/mobius-hotline-server + +[Install] +WantedBy=multi-user.target
\ No newline at end of file |