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.5 kB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  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. hubapi "gitlink.org.cn/cloudream/jcs-pub/hub/sdk/api"
  9. )
  10. type ServerEventChan = async.UnboundChannel[ServerEvent]
  11. type ServerEvent interface {
  12. IsServerEvent() bool
  13. }
  14. type ExitEvent struct {
  15. ServerEvent
  16. Err error
  17. }
  18. type Server struct {
  19. cfg *Config
  20. httpSrv *http.Server
  21. svc *Service
  22. eventChan *ServerEventChan
  23. }
  24. func NewServer(cfg *Config, svc *Service) *Server {
  25. return &Server{
  26. cfg: cfg,
  27. svc: svc,
  28. eventChan: async.NewUnboundChannel[ServerEvent](),
  29. }
  30. }
  31. func (s *Server) Start() *ServerEventChan {
  32. go func() {
  33. if s.cfg == nil {
  34. return
  35. }
  36. engine := gin.New()
  37. s.httpSrv = &http.Server{
  38. Addr: s.cfg.Listen,
  39. Handler: engine,
  40. }
  41. s.initRouters(engine)
  42. logger.Infof("start serving http at: %s", s.cfg.Listen)
  43. err := s.httpSrv.ListenAndServe()
  44. s.eventChan.Send(ExitEvent{Err: err})
  45. }()
  46. return s.eventChan
  47. }
  48. func (s *Server) Stop() {
  49. if s.httpSrv == nil {
  50. s.eventChan.Send(ExitEvent{})
  51. return
  52. }
  53. s.httpSrv.Shutdown(context.Background())
  54. }
  55. func (s *Server) initRouters(engine *gin.Engine) {
  56. engine.GET(hubapi.GetStreamPath, s.IOSvc().GetStream)
  57. engine.POST(hubapi.SendStreamPath, s.IOSvc().SendStream)
  58. engine.POST(hubapi.ExecuteIOPlanPath, s.IOSvc().ExecuteIOPlan)
  59. engine.POST(hubapi.SendVarPath, s.IOSvc().SendVar)
  60. engine.GET(hubapi.GetVarPath, s.IOSvc().GetVar)
  61. }

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