serv_web.go 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. // package serv_web -- сервер бота на файбере
  2. package serv_web
  3. import (
  4. "fmt"
  5. "log"
  6. "os"
  7. "sync"
  8. "time"
  9. "github.com/gofiber/fiber/v2"
  10. // "github.com/gofiber/template/html"
  11. "wartank/server/serv_web/web_api"
  12. "wartank/pkg/types"
  13. )
  14. /*
  15. Главный тип бота на файбере
  16. */
  17. // ServWeb -- главный тип приложения
  18. type ServWeb struct {
  19. app types.IServer
  20. api *web_api.WebApi
  21. router *fiber.App
  22. block *sync.RWMutex
  23. port string // Порт веб-сервера
  24. }
  25. // NewServWeb -- возвращае тновый *ServFiber
  26. func NewServWeb(app types.IServer) (serv *ServWeb, err error) {
  27. fmt.Printf("NewServWeb()\n")
  28. if app == nil {
  29. return nil, fmt.Errorf("NewServWeb(): IApp is nil")
  30. }
  31. port := os.Getenv("SERVER_PORT")
  32. if port == "" {
  33. return nil, fmt.Errorf("NewServWeb(): env SERVER_PORT not set")
  34. }
  35. sf := &ServWeb{
  36. app: app,
  37. block: &sync.RWMutex{},
  38. port: port,
  39. }
  40. // engine := html.New("./static/tmpl", "*.tmpl.html")
  41. fiberConfig := fiber.Config{
  42. ServerHeader: "WarTank",
  43. BodyLimit: 10 * 1024 * 1024,
  44. Concurrency: 512,
  45. ReadTimeout: 30 * time.Second,
  46. WriteTimeout: 30 * time.Second,
  47. IdleTimeout: 30 * time.Second,
  48. ReadBufferSize: 20 * 1024,
  49. WriteBufferSize: 20 * 1024,
  50. AppName: "WarTank",
  51. Network: fiber.NetworkTCP4,
  52. // Views: engine,
  53. }
  54. sf.router = fiber.New(fiberConfig)
  55. // sf.router.Static("/static", "./static")
  56. return sf, nil
  57. }
  58. // Run -- запускает бота в работу
  59. func (sf *ServWeb) Run() error {
  60. log.Printf("ServWeb.Run()\n")
  61. var err error
  62. {
  63. sf.api, err = web_api.NewWebApi(sf.app)
  64. if err != nil {
  65. return fmt.Errorf("ServWeb.Run(): in make WebApi, err=\n\t%w", err)
  66. }
  67. }
  68. sf.api.Run()
  69. log.Printf("ServWeb.Run(): listen\n")
  70. if err := sf.router.Listen(":" + sf.port); err != nil {
  71. panic(fmt.Errorf("ServWeb.Run(): in serving web, err=\n\t%w", err))
  72. }
  73. return nil
  74. }
  75. // Router -- возвращает роутер сервера
  76. func (sf *ServWeb) Router() *fiber.App {
  77. return sf.router
  78. }