59 lines
1004 B
Go
59 lines
1004 B
Go
|
package main
|
||
|
|
||
|
import (
|
||
|
"encoding/json"
|
||
|
"flag"
|
||
|
"log"
|
||
|
"net/http"
|
||
|
"os"
|
||
|
"sync"
|
||
|
|
||
|
"code.ivysaur.me/contented"
|
||
|
)
|
||
|
|
||
|
type ContentedMultiCfg struct {
|
||
|
Servers []struct {
|
||
|
ListenAddr string
|
||
|
Options contented.ServerOptions
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func main() {
|
||
|
configFile := flag.String("config", "contented-multi.cfg", "Path to configuration file")
|
||
|
flag.Parse()
|
||
|
|
||
|
fh, err := os.Open(*configFile)
|
||
|
if err != nil {
|
||
|
panic(err)
|
||
|
}
|
||
|
|
||
|
var cfg ContentedMultiCfg
|
||
|
err = json.NewDecoder(fh).Decode(&cfg)
|
||
|
if err != nil {
|
||
|
panic(err)
|
||
|
}
|
||
|
|
||
|
fh.Close()
|
||
|
|
||
|
wg := sync.WaitGroup{}
|
||
|
wg.Add(len(cfg.Servers))
|
||
|
|
||
|
for i, _ := range cfg.Servers {
|
||
|
go (func(i int) {
|
||
|
defer wg.Done()
|
||
|
|
||
|
s, err := contented.NewServer(&cfg.Servers[i].Options)
|
||
|
if err != nil {
|
||
|
log.Printf("Failed to create server %d/%d: %s", i+1, len(cfg.Servers), err.Error())
|
||
|
return
|
||
|
}
|
||
|
|
||
|
err = http.ListenAndServe(cfg.Servers[i].ListenAddr, s)
|
||
|
log.Printf("Server %d/%d shutting down: %s", i+1, len(cfg.Servers), err.Error())
|
||
|
|
||
|
})(i)
|
||
|
}
|
||
|
|
||
|
wg.Wait()
|
||
|
}
|