Browse Source

Restructure layout

Add configuration file
Add redis connection
master
Matthew Faltys 5 years ago
parent
commit
e28f7686cc
  1. 9
      config.gcfg
  2. 191
      nethack-launcher.go

9
config.gcfg

@ -0,0 +1,9 @@
[nethacklauncher]
loglevel = "debug"
recordlocation = "record"
reclistlocation = "reclist"
bootstrapdelay = 1
[redis]
host = "localhost:6379"
password = ""

191
nethack-launcher.go

@ -1,103 +1,116 @@
package main
import (
"flag"
"bufio"
"fmt"
"io/ioutil"
"net/http"
"os"
"os/exec"
"time"
"github.com/unixvoid/glogger"
"gopkg.in/gcfg.v1"
"gopkg.in/redis.v5"
)
type Config struct {
NethackLauncher struct {
Loglevel string
RecordLocation string
ReclistLocation string
BootstrapDelay time.Duration
}
Redis struct {
Host string
Password string
}
}
var (
loglevel string
recordlocation string
reclistlocation string
port = 8080
config = Config{}
)
func main() {
// init runtime args
flag.StringVar(&loglevel, "loglevel", "debug", loglevel)
flag.StringVar(&recordlocation, "recordlocation", "record", recordlocation)
flag.StringVar(&reclistlocation, "reclistlocation", "reclist", reclistlocation)
flag.Parse()
// read conf file
readConf()
// init config file and logger
initLogger(loglevel)
//// // make sure record file exists
//// if _, err := os.Stat(recordlocation); os.IsNotExist(err) {
//// glogger.Info.Printf("record file not found in %s\n", recordlocation)
//// fmt.Printf("%s\n", err)
//// os.Exit(1)
//// }
//// // make sure reclist bin exists
//// if _, err := os.Stat(reclistlocation); os.IsNotExist(err) {
//// glogger.Info.Printf("reclist binary not found in %s\n", reclistlocation)
//// fmt.Printf("%s\n", err)
//// os.Exit(1)
//// }
clearScreen()
printWelcomeScreen()
initLogger()
// init redis connection
redisClient, redisErr := initRedisConnection()
if redisErr != nil {
glogger.Debug.Printf("redis connection cannot be made, trying again in %s second(s)\n", config.NethackLauncher.BootstrapDelay*time.Second)
time.Sleep(config.NethackLauncher.BootstrapDelay * time.Second)
redisClient, redisErr = initRedisConnection()
if redisErr != nil {
glogger.Error.Println("redis connection cannot be made, exiting.")
panic(redisErr)
}
} else {
glogger.Debug.Println("connection to redis succeeded.")
}
// 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()
screenFunction := printWelcomeScreen(redisClient)
fmt.Printf("screen %s recieved\n", screenFunction)
}
var b []byte = make([]byte, 1)
for {
os.Stdin.Read(b)
//fmt.Println("I got the byte", b, "("+string(b)+")")
switch string(b) {
case "q":
clearScreen()
os.Exit(0)
default:
//fmt.Printf("command '%s' not implimented\n", string(b))
//fmt.Printf(">> ")
}
func readConf() {
// init config file
err := gcfg.ReadFileInto(&config, "config.gcfg")
if err != nil {
panic(fmt.Sprintf("Could not load config.gcfg, error: %s\n", err))
}
//scanner := bufio.NewScanner(os.Stdin)
//for scanner.Scan() {
// //fmt.Println(scanner.Text())
// switch scanner.Text() {
// case "q":
// os.Exit(0)
// default:
// fmt.Printf("command '%s' not implimented\n", scanner.Text())
// fmt.Printf(">> ")
// }
//}
//if err := scanner.Err(); err != nil {
// log.Println(err)
//}
}
func initLogger(loglevel string) {
func initLogger() {
// init logger
if loglevel == "debug" {
if config.NethackLauncher.Loglevel == "debug" {
glogger.LogInit(os.Stdout, os.Stdout, os.Stdout, os.Stderr)
} else if loglevel == "cluster" {
} else if config.NethackLauncher.Loglevel == "cluster" {
glogger.LogInit(os.Stdout, os.Stdout, ioutil.Discard, os.Stderr)
} else if loglevel == "info" {
} else if config.NethackLauncher.Loglevel == "info" {
glogger.LogInit(os.Stdout, ioutil.Discard, ioutil.Discard, os.Stderr)
} else {
glogger.LogInit(ioutil.Discard, ioutil.Discard, ioutil.Discard, os.Stderr)
}
}
func initRedisConnection() (*redis.Client, error) {
// init redis connection
redisClient := redis.NewClient(&redis.Options{
Addr: config.Redis.Host,
Password: config.Redis.Password,
DB: 0,
})
_, redisErr := redisClient.Ping().Result()
return redisClient, redisErr
}
func checkFiles() {
// make sure record file exists
if _, err := os.Stat(config.NethackLauncher.RecordLocation); os.IsNotExist(err) {
glogger.Info.Printf("record file not found in %s\n", config.NethackLauncher.RecordLocation)
fmt.Printf("%s\n", err)
os.Exit(1)
}
// make sure reclist bin exists
if _, err := os.Stat(config.NethackLauncher.ReclistLocation); os.IsNotExist(err) {
glogger.Info.Printf("reclist binary not found in %s\n", config.NethackLauncher.ReclistLocation)
fmt.Printf("%s\n", err)
os.Exit(1)
}
}
func clearScreen() {
cmd := exec.Command("clear")
cmd.Stdout = os.Stdout
cmd.Run()
}
func printWelcomeScreen() {
func printWelcomeScreen(redisClient *redis.Client) string {
clearScreen()
println("unixvoid.com underground nethack server")
println("")
println(" Not logged in.")
@ -108,13 +121,61 @@ func printWelcomeScreen() {
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").Run()
clearScreen()
printLoginScreen(redisClient)
case "r":
clearScreen()
return ("r")
case "w":
clearScreen()
return ("w")
case "q":
clearScreen()
os.Exit(0)
default:
}
}
}
func printLoginScreen(redisClient *redis.Client) {
println("unixvoid.com underground nethack server")
println("")
println(" Please enter your username. (blank entry aborts)")
println("")
fmt.Printf(">> ")
scanner := bufio.NewScanner(os.Stdin)
for scanner.Scan() {
if scanner.Text() == "" {
printWelcomeScreen(redisClient)
}
fmt.Printf("you entered '%s'\n", scanner.Text())
// check redis for user
}
if err := scanner.Err(); err != nil {
fmt.Printf("%s\n", err)
}
}
func gethighscore(w http.ResponseWriter, r *http.Request) {
// run script
output, err := exec.Command(reclistlocation,
output, err := exec.Command(config.NethackLauncher.ReclistLocation,
"-f",
recordlocation).CombinedOutput()
config.NethackLauncher.RecordLocation).CombinedOutput()
if err != nil {
fmt.Printf("%s\n", err)
}

Loading…
Cancel
Save