Files
work_cation/service/server.go
T
2024-10-12 00:38:18 +08:00

74 lines
1.3 KiB
Go

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("/user", func(c *gin.Context) {
user := repo.User.GetUserInfo(global.DB)
c.JSON(200, user)
})
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
}