From b1c76d7d221317e1a2707594a7e803bf6defade5 Mon Sep 17 00:00:00 2001 From: Josh Baker Date: Thu, 30 Mar 2017 03:41:52 -0700 Subject: [PATCH] cli auto reconnect --- cmd/tile38-cli/main.go | 68 +++++++++++++++++++++++++++--------------- 1 file changed, 44 insertions(+), 24 deletions(-) diff --git a/cmd/tile38-cli/main.go b/cmd/tile38-cli/main.go index 710bda4e..d962d4ed 100644 --- a/cmd/tile38-cli/main.go +++ b/cmd/tile38-cli/main.go @@ -154,16 +154,29 @@ func main() { } addr := fmt.Sprintf("%s:%d", hostname, port) - conn, err := client.Dial(addr) - if err != nil { - if _, ok := err.(net.Error); ok { - fmt.Fprintln(os.Stderr, refusedErrorString(addr)) - } else { - fmt.Fprintln(os.Stderr, err.Error()) + var conn *client.Conn + connDial := func() { + var err error + conn, err = client.Dial(addr) + if err != nil { + if _, ok := err.(net.Error); ok { + fmt.Fprintln(os.Stderr, refusedErrorString(addr)) + } else { + fmt.Fprintln(os.Stderr, err.Error()) + os.Exit(1) + } + } + if conn != nil { + if output == "resp" { + _, err := conn.Do("output resp") + if err != nil { + fmt.Fprintln(os.Stderr, err.Error()) + os.Exit(1) + } + } } - return } - defer conn.Close() + connDial() livemode := false aof := false defer func() { @@ -252,13 +265,6 @@ func main() { f.Close() } }() - if output == "resp" { - _, err := conn.Do("output resp") - if err != nil { - fmt.Fprintln(os.Stderr, err.Error()) - return - } - } for { var command string var err error @@ -266,7 +272,11 @@ func main() { if raw || noprompt { command, err = line.Prompt("") } else { - command, err = line.Prompt(addr + "> ") + if conn == nil { + command, err = line.Prompt("not connected> ") + } else { + command, err = line.Prompt(addr + "> ") + } } } else { @@ -276,14 +286,16 @@ func main() { nohist := strings.HasPrefix(command, " ") command = strings.TrimSpace(command) if command == "" { - _, err := conn.Do("pInG") - if err != nil { - if err != io.EOF { - fmt.Fprintln(os.Stderr, err.Error()) - } else { - fmt.Fprintln(os.Stderr, refusedErrorString(addr)) + if conn != nil { + _, err := conn.Do("pInG") + if err != nil { + if err != io.EOF { + fmt.Fprintln(os.Stderr, err.Error()) + return + } else { + fmt.Fprintln(os.Stderr, refusedErrorString(addr)) + } } - return } } else { if !nohist { @@ -303,12 +315,20 @@ func main() { continue } aof = (command[0] == 'a' || command[0] == 'A') && strings.HasPrefix(strings.ToLower(command), "aof ") + tryAgain: + if conn == nil { + connDial() + if conn == nil { + continue + } + } msg, err := conn.Do(command) if err != nil { if err != io.EOF { fmt.Fprintln(os.Stderr, err.Error()) } else { - fmt.Fprintln(os.Stderr, refusedErrorString(addr)) + conn = nil + goto tryAgain } return }