package servicex import ( "fmt" "game/common/proto/pb" "game/common/serviceName" config "github.com/flipped-aurora/gin-vue-admin/server/configx" "github.com/fox/fox/log" "github.com/fox/fox/service" "github.com/fox/fox/xrand" ) var servers []*AdminService type AdminService struct { *service.NatsService } func GetService() *AdminService { idx := xrand.RandN(len(servers)) return servers[idx] } func Init() { log.DebugF("init service begin id:%v, num:%v", config.Command.ServiceId, config.Command.ServiceNum) for i := 0; i < config.Command.ServiceNum; i++ { sid := config.Command.ServiceId + i if srv := newService(sid); srv != nil { servers = append(servers, srv) } } } func Stop() { for _, srv := range servers { log.DebugF("notify stop service %v", srv.Name()) srv.NotifyStop() } for _, srv := range servers { srv.WaitStop() } } func newService(serviceId int) *AdminService { var err error s := new(AdminService) sName := fmt.Sprintf("%v-%d", serviceName.Admin, serviceId) if s.NatsService, err = service.NewNatsService(&service.InitNatsServiceParams{ EtcdAddress: config.Cfg.Etcd.Address, EtcdUsername: "", EtcdPassword: "", NatsAddress: config.Cfg.Nats.Address, ServiceType: serviceName.Admin, ServiceName: sName, OnFunc: s, TypeId: int(pb.ServiceTypeId_STI_Admin), Version: config.Cfg.BuildDate, }); err != nil { log.Fatal(err.Error()) return nil } //s.initRpcProcessor() s.OnInit() return s } func (s *AdminService) OnInit() { // if err := s.NatsService.QueueSubscribe(service.GroupTopic(s), service.GroupQueue(s)); err != nil { // log.Error(err.Error()) // } s.NatsService.Run() log.Debug("onInit") } func (s *AdminService) CanStop() bool { return true } func (s *AdminService) OnStop() { s.NatsService.OnStop() log.Debug("OnStop") } // 处理其它服发送过来的消息 func (s *AdminService) OnMessage(data []byte) error { _ = data return nil }