rove/cmd/rove-server/main.go

84 lines
1.7 KiB
Go
Raw Normal View History

2020-05-29 16:51:13 +01:00
package main
2020-05-29 17:41:11 +01:00
import (
"flag"
"fmt"
"os"
"os/signal"
"syscall"
"time"
"github.com/mdiluz/rove/pkg/persistence"
"github.com/mdiluz/rove/pkg/server"
2020-06-02 15:54:22 +01:00
"github.com/mdiluz/rove/pkg/version"
2020-05-29 17:41:11 +01:00
)
2020-05-29 16:51:13 +01:00
2020-06-02 15:54:22 +01:00
var ver = flag.Bool("version", false, "Display version number")
var quit = flag.Int("quit", 0, "Quit after n seconds, useful for testing")
2020-06-06 12:13:54 +01:00
var address = flag.String("address", "", "The address to host on, automatically selected if empty")
var data = flag.String("data", "", "Directory to store persistant data, no storage if empty")
2020-06-06 18:23:27 +01:00
var tick = flag.Int("tick", 5, "Number of minutes per server tick (0 for no tick)")
2020-06-06 12:13:54 +01:00
func InnerMain() {
2020-06-01 18:10:25 +01:00
flag.Parse()
2020-06-03 17:29:56 +01:00
// Print the version if requested
2020-06-02 15:54:22 +01:00
if *ver {
fmt.Println(version.Version)
2020-06-06 12:13:54 +01:00
return
2020-06-02 15:54:22 +01:00
}
2020-06-03 17:29:56 +01:00
fmt.Printf("Initialising version %s...\n", version.Version)
// Set the persistence path
persistence.SetPath(*data)
2020-06-03 17:29:56 +01:00
// Create the server data
s := server.NewServer(
2020-06-06 12:13:54 +01:00
server.OptionAddress(*address),
2020-06-06 16:01:49 +01:00
server.OptionPersistentData(),
server.OptionTick(*tick))
2020-05-29 17:41:11 +01:00
2020-06-03 17:29:56 +01:00
// Initialise the server
if err := s.Initialise(); err != nil {
panic(err)
}
// Set up the close handler
c := make(chan os.Signal)
signal.Notify(c, os.Interrupt, syscall.SIGTERM)
go func() {
<-c
fmt.Println("SIGTERM recieved, exiting...")
2020-06-03 17:29:56 +01:00
if err := s.Close(); err != nil {
panic(err)
}
os.Exit(0)
}()
// Quit after a time if requested
if *quit != 0 {
go func() {
time.Sleep(time.Duration(*quit) * time.Second)
if err := s.Close(); err != nil {
panic(err)
}
os.Exit(0)
}()
}
2020-06-03 17:29:56 +01:00
// Run the server
fmt.Printf("Serving HTTP on %s\n", s.Addr())
s.Run()
2020-06-03 17:29:56 +01:00
// Close the server
if err := s.Close(); err != nil {
panic(err)
}
2020-05-29 17:41:11 +01:00
}
2020-06-06 12:13:54 +01:00
func main() {
flag.Parse()
InnerMain()
}