"fmt"
"os"
"os/signal"
+ "strings"
"syscall"
)
ctx, cancel := signal.NotifyContext(context.Background(), os.Interrupt, syscall.SIGTERM)
defer cancel()
- _, err := fmt.Println("onechat")
- if err != nil {
- return err
+ args := os.Args[1:]
+ switch {
+ case len(args) == 0:
+ _, err := fmt.Println("onechat")
+ if err != nil {
+ return err
+ }
+ case len(args) == 1 && args[0] == "login":
+ err := login(ctx, os.Stdout)
+ if err != nil {
+ return err
+ }
+ case len(args) == 1 && args[0] == "daemon":
+ err := daemon(ctx, os.Stdout)
+ if err != nil {
+ return err
+ }
+ case len(args) == 1 && args[0] == "chat":
+ err := chat(ctx, os.Stdin, os.Stdout)
+ if err != nil {
+ return err
+ }
+ case len(args) > 0 && args[0] == "probe":
+ err := probe(ctx, args[1:], os.Stdout)
+ if err != nil {
+ return err
+ }
+ default:
+ return fmt.Errorf("unknown command %q", strings.Join(args, " "))
}
return ctx.Err()