package service import ( "fmt" "math/rand" "pro2d/common" "pro2d/common/components" "pro2d/common/db/mongoproxy" "pro2d/common/db/redisproxy" "pro2d/common/etcd" "pro2d/models" "time" ) type AccountServer struct { components.IHttp Sconf *common.SConf } func NewAccountServer(version string, port ...string) *AccountServer { return &AccountServer{IHttp: components.NewHttpServer(version, port...)} } func (s *AccountServer) Init(sconf *common.SConf) error { s.Sconf = sconf //mgo init err := mongoproxy.ConnectMongo(sconf.MongoConf, sconf.ID) //redis init if err = redisproxy.ConnectRedis(sconf.RedisConf.DB, sconf.RedisConf.Auth, sconf.RedisConf.Address); err != nil { return err } //Etcd 初始化 err = etcd.NewEtcdClient(common.GlobalConf.Etcd) if err != nil { return err } etcd.PutWithLeasePrefix(sconf.Name, fmt.Sprintf("%d", sconf.ID), fmt.Sprintf("%s:%d", sconf.IP, sconf.Port), 5) models.NewDBSeed(sconf.ID).InitServerDatabase(models.AccountModels()) models.DBSeedS().InitAutoIncreUidTable(models.AccountModels()) return nil } func (s *AccountServer) TimeOut() { models.DBSeedS().SaveAutoincrementTimer(models.AccountModels()) components.TimeOut(1*time.Second, s.TimeOut) } func (s *AccountServer) Start() error { if err := s.Init(common.GlobalConf.AccountConf); err != nil { return err } //设置随机种子 rand.Seed(time.Now().Unix()) //开始定时器 s.TimeOut() return s.IHttp.Start() } func (s *AccountServer) Stop() { s.IHttp.Stop() etcd.CloseEtcd() }