aboutsummaryrefslogtreecommitdiff
path: root/cmd/mobius-hotline-client
diff options
context:
space:
mode:
authorJeff Halter <868228+jhalter@users.noreply.github.com>2021-07-29 08:42:33 -0700
committerJeff Halter <868228+jhalter@users.noreply.github.com>2021-07-29 08:42:33 -0700
commit0c0b2680077c1103609c87a652bcc2263460b1d7 (patch)
tree9968655a20d3caec9077b49db2473cbdb344cb71 /cmd/mobius-hotline-client
parent95753255a17026750f5b53cc470999785e0c515f (diff)
Re-organize cmd paths
Diffstat (limited to 'cmd/mobius-hotline-client')
-rw-r--r--cmd/mobius-hotline-client/main.go114
-rw-r--r--cmd/mobius-hotline-client/mobius-client-config.yaml8
-rw-r--r--cmd/mobius-hotline-client/mobius-hotline-server.service13
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