package main import ( "fmt" "os" "os/exec" "time" "gopkg.in/redis.v5" ) func printUserScreen(redisClient *redis.Client, username string) string { clearScreen() fmt.Printf(" %s\n", config.NethackLauncher.ServerDisplay) println("") fmt.Printf(" Logged in as: %s\n", username) println("") println(" l) Logout") println(" c) Change password") println(" w) Watch games in progress") println(" h) View highscores") println(" a) View all scores") println(" e) Edit config") println(" r) Recover from crash") fmt.Printf(" p) Play NetHack %s\n", config.NethackLauncher.NethackVersion) println(" q) Quit") println("") fmt.Printf(">> ") // disable input buffering exec.Command("stty", "-F", "/dev/tty", "cbreak", "min", "1").Run() // do not display entered characters on the screen exec.Command("stty", "-F", "/dev/tty", "-echo").Run() var b []byte = make([]byte, 1) for { os.Stdin.Read(b) switch string(b) { case "l": // restart display exec.Command("stty", "-F", "/dev/tty", "echo", "-cbreak").Run() clearScreen() printWelcomeScreen(redisClient) case "e": hackRCLoc := fmt.Sprintf("%s/user/%s/.nethackrc", config.NethackLauncher.HackDir, username) exec.Command("stty", "-F", "/dev/tty", "echo", "-cbreak").Run() clearScreen() nh := exec.Command("vim", "-Z", hackRCLoc) nh.Stdout = os.Stdout nh.Stdin = os.Stdin nh.Stderr = os.Stderr nh.Run() clearScreen() printUserScreen(redisClient, username) case "c": printChangePasswordScreen(redisClient, username) clearScreen() case "w": clearScreen() printProgressScreen(redisClient, username) case "h": clearScreen() printHighScores(redisClient, username) case "a": clearScreen() printAllScores(redisClient, username) case "p": wg.Add(1) currentTime := time.Now().UTC() fulltime := currentTime.Format("2006-01-02.03:04:05") go runGame(username, fulltime) watcher := startWatcher(username, fulltime, redisClient) wg.Wait() close(watcher) printUserScreen(redisClient, username) case "r": clearScreen() recoverSave(redisClient, username) case "q": exec.Command("stty", "-F", "/dev/tty", "echo", "-cbreak").Run() clearScreen() os.Exit(0) default: } } }