package service import ( "errors" "github.com/gin-gonic/gin" "log" "net/http" "work_cation/cfg" "work_cation/global" "work_cation/repo" ) type serverService struct { Status string server *http.Server } const ( StatusOnline = "online" StatusOffline = "offline" ) var Server = &serverService{Status: StatusOffline} func (s *serverService) Online() error { if s.Status == StatusOnline { return nil } // 启动服务发现 user := repo.User.GetUserInfo(global.DB) if err := Zeroconf.Register(user); err != nil { return err } // 启动服务 if err := s.StartListenServer(); err != nil { return err } // 修改状态 s.Status = StatusOnline return nil } func (s *serverService) StatusOffline() error { if err := s.server.Close(); err != nil { return err } // 关闭服务发现 Zeroconf.Close() // 修改状态 s.Status = StatusOffline return nil } func (s *serverService) StartListenServer() error { router := gin.New() router.GET("/", func(c *gin.Context) { c.JSON(200, gin.H{"message": "hello"}) }) srv := &http.Server{ Addr: cfg.T.ServerAddr, Handler: router, } go func() { if err := srv.ListenAndServe(); err != nil && !errors.Is(err, http.ErrServerClosed) { log.Fatalf("listen: %s\n", err) } }() s.server = srv return nil }