package main import ( "fmt" "os" "os/signal" "pro2d/common/components" "pro2d/conf" _ "pro2d/conf" "pro2d/models" "pro2d/utils/db" "pro2d/utils/etcd" "pro2d/utils/logger" "syscall" ) type AccountServer struct { components.IHttp EtcdClient *etcd.EtcdClient } func NewAccountServer(version string, port ...string) *AccountServer { return &AccountServer{IHttp: components.NewHttpServer(version, port...)} } func (s *AccountServer) Init() error { //mongo 初始化 db.MongoDatabase = db.MongoClient.Database(conf.GlobalConf.AccountConf.DBName) models.InitAccountServerModels() //Etcd 初始化 var err error s.EtcdClient, err = etcd.NewEtcdClient(conf.GlobalConf.Etcd) if err != nil { return err } s.EtcdClient.PutWithLeasePrefix(conf.GlobalConf.AccountConf.Name, conf.GlobalConf.AccountConf.ID, fmt.Sprintf("%s:%d", conf.GlobalConf.AccountConf.IP, conf.GlobalConf.AccountConf.Port), 5) return nil } func (s *AccountServer) Start() error { if err := s.Init(); err != nil { return err } return s.IHttp.Start() } func main() { err := make(chan error) stopChan := make(chan os.Signal) signal.Notify(stopChan, syscall.SIGTERM, syscall.SIGINT, syscall.SIGKILL) web := NewAccountServer("v1", fmt.Sprintf(":%d", conf.GlobalConf.AccountConf.Port)) web.BindHandler(&AccountAction{HttpServer: web}) go func() { err <- web.Start() }() select { case e := <- err: logger.Error("game server error: %v", e) case <-stopChan: logger.Debug("game stop") web.Stop() } }