You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

103 lines
2.2 KiB

package main
import (
"fmt"
"log"
"os"
"time"
"daydev.org/shipsgs/internal/config"
"daydev.org/shipsgs/internal/gameServer"
"daydev.org/shipsgs/internal/server"
"daydev.org/shipsgs/internal/utils"
"github.com/xlab/closer"
)
var Logger *utils.Logger
var ch_sighup *chan bool
//channel to shutdown oneSecUpdater
var ch_oneSecUpdaterShutdown chan bool
//GameServer Public Global Instance
var GS *gameServer.GameServer
func main() {
logFile, err := os.OpenFile("runlog.log", os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644)
if err != nil {
fmt.Println(err)
} else {
log.SetOutput(logFile)
}
defer logFile.Close()
closer.Bind(cleanup)
//Can be optimised to NEW instead of MAKE
sighup := make(chan bool)
ch_sighup = &sighup
ch_oneSecUpdaterShutdown = make(chan bool)
//If debug - fill Stdout too - LOG to use?
//Logger = utils.New(os.Stdout, utils.LevelInfo)
config.ReadConfig()
GS = new(gameServer.GameServer)
GS.Init(Logger, &config.Config)
go GS.Update()
//Starting oneSecUpdater after GameServer is ready, because oneSecUpdater
// is depending on GameServer.Shutdown channel which
// is IF uninitialized we will get "invalid memory address or nil pointer dereference"
go oneSecUpdater()
log.Println("Starting Healthy")
//closer.Hold()
server.SetupAndRun(":8080", ch_sighup, GS)
GS.WG.Wait()
}
func cleanup() {
fmt.Println("Shutting down ")
//Shutting down oneSecUpdater
ch_oneSecUpdaterShutdown <- true
//Investigate why no messages on correct closing
GS.Shutdown <- true
// Main function has to be closed the last
*ch_sighup <- true
Logger.PrintInfo("main", map[string]string{
"Info": "Closing Application Normally",
})
}
func oneSecUpdater() {
//The intention here is to awake after 1 second and send an update to GameServer to update everything
for {
select {
case <-ch_oneSecUpdaterShutdown:
fmt.Println("Shutdown One Sec Updater")
GS.WG.Done()
// Goroutine will wait untill the DEFAULT: will happen before shutdown will take
// any effect
case <-time.After(time.Second * 1):
fmt.Println("1 Sec Timer")
default:
//*** maybe try this 10 secs in a CASE segment ?
// This blocks whole goroutine
<-time.After(time.Second * 2)
GS.OneSecond <- true
}
}
}