hnakra/cmd/hn-router/main.go

94 lines
2.5 KiB
Go
Raw Normal View History

2023-05-25 16:08:56 -06:00
package main
import "io"
import "os"
import "log"
2023-05-26 11:05:22 -06:00
import "time"
2023-05-25 16:08:56 -06:00
import "hnakra/router"
2023-05-31 16:08:29 -06:00
import "hnakra/rotate"
import "hnakra/daemon"
2023-05-26 11:05:22 -06:00
import "hnakra/routines"
import "hnakra/router/rcon"
import "hnakra/router/config"
2023-06-01 01:00:15 -06:00
import "hnakra/cmd/hn-router/srvhttps"
import "hnakra/cmd/hn-router/srvhnakra"
2023-05-25 16:08:56 -06:00
const banner = "\n" +
" -=\\\n" +
"__. __|.\\___\n" +
" - ``.__.-` ```'-. | | |\\ | |\\ | / |''| |\\\n" +
" `-, u `. |--| | \\| |-\\ |< |-< |-\\\n" +
" ,-' ,```` VVv | | | | | \\ | \\ | \\ | \\\n" +
"/___-' ````--//----'''``\n" +
" |/ DISTRIBUTED HOLANET SERVER ROUTER\n" +
" '/"
func main () {
2023-05-26 11:07:05 -06:00
// set up logging
2023-05-25 16:08:56 -06:00
logDir := os.Getenv("HNAKRA_LOG_DIR")
if logDir != "" {
logger, err := rotate.New(logDir)
if err != nil { log.Fatal("cannot access log dir:", err) }
log.SetOutput(logger)
}
rcon := rcon.New("/debug/rcon")
originalWriter := log.Writer()
log.SetOutput(io.MultiWriter(originalWriter, rcon))
log.Println(banner)
// load config
log.Println("... loading config")
conf, err := config.File("/etc/hnakra/hnakra.conf")
if err != nil { log.Fatal(err) }
log.Println("(i) users:")
conf.OverUsers(func (name string, user config.User) bool {
log.Println(" -", name)
return true
})
log.Println("(i) aliases:")
if conf.AliasFallback() != "" {
log.Println(" - (fallback) ->", conf.AliasFallback())
}
conf.OverAliases(func (alias, target string) bool{
log.Println(" -", alias, "->", target)
return true
})
rcon.SetConfig(conf)
2023-05-26 11:07:05 -06:00
// set up servers
2023-05-25 16:08:56 -06:00
log.Println("... starting up")
2023-05-26 11:07:05 -06:00
manager := routines.Manager { RestartDeadline: time.Second * 8 }
2023-05-25 16:08:56 -06:00
rout := router.New(conf)
srvhnakra := &srvhnakra.Server { Config: conf, Router: rout }
2023-05-31 16:08:29 -06:00
manager.Append(srvhnakra)
2023-05-26 11:07:05 -06:00
if conf.HTTPSEnable() {
srvhttps := &srvhttps.Server { Config: conf, Handler: rout }
2023-05-31 16:08:29 -06:00
manager.Append(srvhttps)
2023-05-26 11:07:05 -06:00
}
// set up rcon
2023-05-25 16:08:56 -06:00
rcon.SetRouter(rout)
if conf.RconEnable() {
err = rout.HTTPMux().Handle("@/debug/rcon/", rcon)
if err != nil { log.Fatalln("XXX", err) }
} else {
log.SetOutput(originalWriter)
}
2023-05-26 11:07:05 -06:00
2023-05-31 16:08:29 -06:00
// be a daemon
2023-05-31 16:09:56 -06:00
daemon.ShutdownOnSigint(&manager)
2023-05-31 16:08:29 -06:00
pidfile := daemon.PidFile(os.Getenv("HNAKRA_PIDFILE"))
if !pidfile.Empty() {
err := pidfile.Start()
if err != nil { log.Println("!!! could not write pid:", err) }
2023-05-31 16:09:56 -06:00
defer func () {
err := pidfile.Close()
if err != nil { log.Println("!!! could not delete pidfile:", err) }
} ()
2023-05-31 16:08:29 -06:00
}
2023-05-26 11:07:05 -06:00
// run servers
err = manager.Run()
2023-05-25 16:08:56 -06:00
if err != nil { log.Println("XXX", err) }
}