]> git.giacomolli.uk - onechat/blob - main.go
680c58d9a1c3884b5f8bab7bc8ef04d3874ee12c
[onechat] / main.go
1 package main
2
3 import (
4 "context"
5 "fmt"
6 "os"
7 "os/signal"
8 "strings"
9 "syscall"
10 )
11
12 func main() {
13 err := run()
14 if err != nil {
15 fmt.Fprintln(os.Stderr, "onechat:", err)
16 os.Exit(1)
17 }
18 }
19
20 func run() error {
21 ctx, cancel := signal.NotifyContext(context.Background(), os.Interrupt, syscall.SIGTERM)
22 defer cancel()
23
24 args := os.Args[1:]
25 switch {
26 case len(args) == 0:
27 _, err := fmt.Println("onechat")
28 if err != nil {
29 return err
30 }
31 case len(args) == 1 && args[0] == "login":
32 err := login(ctx, os.Stdout)
33 if err != nil {
34 return err
35 }
36 case len(args) == 1 && args[0] == "daemon":
37 err := daemon(ctx, os.Stdout)
38 if err != nil {
39 return err
40 }
41 case len(args) == 1 && args[0] == "chat":
42 err := chat(ctx, os.Stdin, os.Stdout)
43 if err != nil {
44 return err
45 }
46 case len(args) > 0 && args[0] == "probe":
47 err := probe(ctx, args[1:], os.Stdout)
48 if err != nil {
49 return err
50 }
51 default:
52 return fmt.Errorf("unknown command %q", strings.Join(args, " "))
53 }
54
55 return ctx.Err()
56 }