]>
Commit | Line | Data |
---|---|---|
6988a057 JH |
1 | package main |
2 | ||
3 | import ( | |
4 | "context" | |
5 | "flag" | |
6 | "fmt" | |
7 | hotline "github.com/jhalter/mobius" | |
8 | "github.com/rivo/tview" | |
9 | "go.uber.org/zap" | |
10 | "go.uber.org/zap/zapcore" | |
11 | "os" | |
12 | "os/signal" | |
13 | "syscall" | |
14 | "time" | |
15 | ) | |
16 | ||
17 | //var defaultTrackerList = []string{ | |
18 | // "hltracker.com:5498", | |
19 | //} | |
20 | ||
21 | const connectTimeout = 3 * time.Second | |
22 | ||
23 | func main() { | |
24 | _, cancelRoot := context.WithCancel(context.Background()) | |
25 | ||
26 | sigChan := make(chan os.Signal, 1) | |
27 | signal.Notify(sigChan, syscall.SIGTERM, syscall.SIGINT, os.Interrupt) | |
28 | ||
29 | version := flag.Bool("version", false, "print version and exit") | |
30 | logLevel := flag.String("log-level", "info", "Log level") | |
31 | userName := flag.String("name", "unnamed", "User name") | |
32 | //srvAddr := flag.String("server", "localhost:5500", "Hostname/Port of server") | |
33 | //login := flag.String("login", "guest", "Login Name") | |
34 | //pass := flag.String("password", "", "Login Password") | |
35 | flag.Parse() | |
36 | ||
37 | if *version { | |
38 | fmt.Printf("v%s\n", hotline.VERSION) | |
39 | os.Exit(0) | |
40 | } | |
41 | ||
42 | zapLvl, ok := zapLogLevel[*logLevel] | |
43 | if !ok { | |
44 | fmt.Printf("Invalid log level %s. Must be debug, info, warn, or error.\n", *logLevel) | |
45 | os.Exit(0) | |
46 | } | |
47 | ||
48 | // init DebugBuffer | |
49 | db := &hotline.DebugBuffer{ | |
50 | TextView: tview.NewTextView(), | |
51 | } | |
52 | ||
53 | cores := []zapcore.Core{ | |
54 | newDebugCore(zapLvl, db), | |
55 | //newStderrCore(zapLvl), | |
56 | } | |
57 | l := zap.New(zapcore.NewTee(cores...)) | |
58 | defer func() { _ = l.Sync() }() | |
59 | logger := l.Sugar() | |
60 | logger.Infow("Started Mobius client", "Version", hotline.VERSION) | |
61 | ||
62 | go func() { | |
63 | sig := <-sigChan | |
64 | logger.Infow("Stopping client", "signal", sig.String()) | |
65 | cancelRoot() | |
66 | }() | |
67 | ||
68 | client := hotline.NewClient(*userName, logger) | |
69 | client.DebugBuf = db | |
70 | client.UI.Start() | |
71 | ||
72 | } | |
73 | ||
74 | func newDebugCore(level zapcore.Level, db *hotline.DebugBuffer) zapcore.Core { | |
75 | encoderCfg := zap.NewProductionEncoderConfig() | |
76 | encoderCfg.TimeKey = "timestamp" | |
77 | encoderCfg.EncodeTime = zapcore.ISO8601TimeEncoder | |
78 | ||
79 | return zapcore.NewCore( | |
80 | zapcore.NewConsoleEncoder(encoderCfg), | |
81 | zapcore.Lock(db), | |
82 | level, | |
83 | ) | |
84 | } | |
85 | ||
86 | func newStderrCore(level zapcore.Level) zapcore.Core { | |
87 | encoderCfg := zap.NewProductionEncoderConfig() | |
88 | encoderCfg.TimeKey = "timestamp" | |
89 | encoderCfg.EncodeTime = zapcore.ISO8601TimeEncoder | |
90 | ||
91 | return zapcore.NewCore( | |
92 | zapcore.NewConsoleEncoder(encoderCfg), | |
93 | zapcore.Lock(os.Stderr), | |
94 | level, | |
95 | ) | |
96 | } | |
97 | ||
98 | var zapLogLevel = map[string]zapcore.Level{ | |
99 | "debug": zap.DebugLevel, | |
100 | "info": zap.InfoLevel, | |
101 | "warn": zap.WarnLevel, | |
102 | "error": zap.ErrorLevel, | |
103 | } |