You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

server.go 1.4 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. package http
  2. import (
  3. "context"
  4. "net/http"
  5. "github.com/gin-gonic/gin"
  6. "gitlink.org.cn/cloudream/common/pkgs/async"
  7. "gitlink.org.cn/cloudream/common/pkgs/logger"
  8. "gitlink.org.cn/cloudream/jcs-pub/client/internal/http/types"
  9. v1 "gitlink.org.cn/cloudream/jcs-pub/client/internal/http/v1"
  10. "gitlink.org.cn/cloudream/jcs-pub/client/internal/services"
  11. )
  12. type ServerEventChan = async.UnboundChannel[ServerEvent]
  13. type ServerEvent interface {
  14. IsServerEvent() bool
  15. }
  16. type ExitEvent struct {
  17. ServerEvent
  18. Err error
  19. }
  20. type Server struct {
  21. cfg *types.Config
  22. httpSrv *http.Server
  23. svc *services.Service
  24. eventChan *ServerEventChan
  25. v1Svr *v1.Server
  26. }
  27. func NewServer(cfg *types.Config, svc *services.Service) *Server {
  28. return &Server{
  29. cfg: cfg,
  30. svc: svc,
  31. eventChan: async.NewUnboundChannel[ServerEvent](),
  32. v1Svr: v1.NewServer(cfg, svc),
  33. }
  34. }
  35. func (s *Server) Start() *ServerEventChan {
  36. go func() {
  37. if s.cfg == nil {
  38. return
  39. }
  40. engine := gin.New()
  41. s.httpSrv = &http.Server{
  42. Addr: s.cfg.Listen,
  43. Handler: engine,
  44. }
  45. s.v1Svr.InitRouters(engine.Group("/v1"))
  46. logger.Infof("start serving http at: %s", s.cfg.Listen)
  47. err := s.httpSrv.ListenAndServe()
  48. s.eventChan.Send(ExitEvent{Err: err})
  49. }()
  50. return s.eventChan
  51. }
  52. func (s *Server) Stop() {
  53. if s.httpSrv == nil {
  54. s.eventChan.Send(ExitEvent{})
  55. return
  56. }
  57. s.httpSrv.Shutdown(context.Background())
  58. }

本项目旨在将云际存储公共基础设施化,使个人及企业可低门槛使用高效的云际存储服务(安装开箱即用云际存储客户端即可,无需关注其他组件的部署),同时支持用户灵活便捷定制云际存储的功能细节。