diff --git a/dospin.yaml b/dospin.yaml index 8543770..f7f0fb3 100644 --- a/dospin.yaml +++ b/dospin.yaml @@ -4,6 +4,7 @@ servers: minecraft: ports: - 25565 + activity_timeout_min: 20m use_public_ip: false initial_size: 4gb size: 4gb diff --git a/servermanager.go b/servermanager.go index 850dee9..37b3947 100644 --- a/servermanager.go +++ b/servermanager.go @@ -39,6 +39,7 @@ type ServerManager struct { connStatus chan ConnStatus lastKeepAliveTime time.Time server ServerHandler + activityTimeout time.Duration } func NewServerManager(name string, server ServerHandler, settings Settings) *ServerManager { @@ -52,6 +53,13 @@ func NewServerManager(name string, server ServerHandler, settings Settings) *Ser sm.server = server sm.lastKeepAliveTime = time.Now() + activityTimeout, err := time.ParseDuration(settings.Servers[sm.name].ActivityTimeout) + if err != nil { // invalid timeout, default to 5 minutes + activityTimeout = time.Duration(5 * time.Minute) + } + sm.activityTimeout = activityTimeout + log.Println("ServerManager: ", name, " has activity timeout of ", sm.activityTimeout.String()) + return sm } @@ -61,8 +69,7 @@ func NewServerManager(name string, server ServerHandler, settings Settings) *Ser func (me *ServerManager) Serve() { // TODO: see if server is currently up, and setup port forwarding if so - activityTimeout := time.Duration(5 * time.Minute) - ticker := time.NewTicker(activityTimeout) + ticker := time.NewTicker(1 * time.Minute) // event loop for running := true; running; { @@ -74,7 +81,7 @@ func (me *ServerManager) Serve() { case action := <-me.in: running = me.serveAction(action) case <-ticker.C: - if time.Since(me.lastKeepAliveTime) > activityTimeout { + if time.Since(me.lastKeepAliveTime) > me.activityTimeout { running = me.serveAction(serverManagerEvent{eventType: SERVERMANAGER_SPINDOWN}) } } diff --git a/settings.go b/settings.go index c250e8b..f1a227e 100644 --- a/settings.go +++ b/settings.go @@ -19,7 +19,7 @@ type Settings struct { type Server struct { Ports []int `yaml:"ports"` - ActivityTimeoutMin int `yaml:"activity_timeout_min"` + ActivityTimeout string `yaml:"activity_timeout"` UsePublicIP bool `yaml:"use_public_ip"` InitialSize string `yaml:"initial_size"` Size string `yaml:"size"`