backend.go 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. package backend
  2. import (
  3. "fmt"
  4. "github.com/allanpk716/ChineseSubFinder/frontend/dist"
  5. "github.com/allanpk716/ChineseSubFinder/internal/backend/routers"
  6. "github.com/allanpk716/ChineseSubFinder/internal/backend/ws_helper"
  7. "github.com/allanpk716/ChineseSubFinder/internal/logic/cron_helper"
  8. "github.com/allanpk716/ChineseSubFinder/internal/logic/file_downloader"
  9. "github.com/gin-contrib/cors"
  10. "github.com/gin-gonic/gin"
  11. "io/ioutil"
  12. "net/http"
  13. )
  14. // StartBackEnd 开启后端的服务器
  15. func StartBackEnd(fileDownloader *file_downloader.FileDownloader, httpPort int, cronHelper *cron_helper.CronHelper) {
  16. gin.SetMode(gin.ReleaseMode)
  17. gin.DefaultWriter = ioutil.Discard
  18. engine := gin.Default()
  19. // 默认所有都通过
  20. engine.Use(cors.Default())
  21. v1Router := routers.InitRouter(fileDownloader, engine, cronHelper)
  22. defer func() {
  23. v1Router.Close()
  24. }()
  25. engine.GET("/", func(c *gin.Context) {
  26. c.Header("content-type", "text/html;charset=utf-8")
  27. c.String(http.StatusOK, string(dist.SpaIndexHtml))
  28. })
  29. engine.StaticFS(dist.SpaFolderJS, dist.Assets(dist.SpaFolderName+dist.SpaFolderJS, dist.SpaJS))
  30. engine.StaticFS(dist.SpaFolderCSS, dist.Assets(dist.SpaFolderName+dist.SpaFolderCSS, dist.SpaCSS))
  31. engine.StaticFS(dist.SpaFolderFonts, dist.Assets(dist.SpaFolderName+dist.SpaFolderFonts, dist.SpaFonts))
  32. engine.StaticFS(dist.SpaFolderIcons, dist.Assets(dist.SpaFolderName+dist.SpaFolderIcons, dist.SpaIcons))
  33. engine.StaticFS(dist.SpaFolderImages, dist.Assets(dist.SpaFolderName+dist.SpaFolderImages, dist.SpaImages))
  34. engine.Any("/api", func(c *gin.Context) {
  35. c.Redirect(http.StatusMovedPermanently, "/")
  36. })
  37. hub := ws_helper.NewHub()
  38. go hub.Run()
  39. defer func() {
  40. hub.Clear()
  41. }()
  42. engine.GET("/ws", func(context *gin.Context) {
  43. ws_helper.ServeWs(fileDownloader.Log, hub, context.Writer, context.Request)
  44. })
  45. // listen and serve on 0.0.0.0:8080(default)
  46. fileDownloader.Log.Infoln("Try Start Server At Port", httpPort)
  47. err := engine.Run(":" + fmt.Sprintf("%d", httpPort))
  48. if err != nil {
  49. fileDownloader.Log.Errorln("Start Server At Port", httpPort, "Error", err)
  50. }
  51. }