main.go 1.08 KB
package main

import (
	"fmt"
	"net/http"
	"os"
	"os/signal"
	"pro2d/cmd/gameserver/service"
	"pro2d/common"
	"pro2d/common/logger"
	"syscall"
)

func main() {
	err := make(chan error)
	stopChan := make(chan os.Signal)
	signal.Notify(stopChan, syscall.SIGTERM, syscall.SIGINT, syscall.SIGKILL)

	userChan := make(chan os.Signal)
	signal.Notify(userChan, syscall.SIGUSR1, syscall.SIGUSR2)

	sconf := common.GlobalConf.GameConf
	s, err1 := service.NewGameServer(sconf)
	if err1 != nil {
		logger.Error(err1)
		return
	}
	go func() {
		err <- http.ListenAndServe(fmt.Sprintf("localhost:%d", sconf.DebugPort), nil)
	}()

	gm := service.NewGmServer(s, fmt.Sprintf(":%d", sconf.GMPort))
	go func() {
		err <- gm.Start()
	}()

	go func() {
		err <- s.Start()
	}()

	for {
		select {
		case e := <-err:
			logger.Error("game server error: %v", e)
			return
		case <-stopChan:
			logger.Debug("game stop...")
			s.Stop()
			return
		case u := <-userChan:
			logger.Debug("userChan .. %v", u.String())
			e := s.IServer.GetPlugin().LoadPlugin()
			if e != nil {
				logger.Error("err: ", e.Error())
			}
		}
	}
}