// package serv_web -- сервер бота на файбере package serv_web import ( "fmt" "log" "os" "sync" "time" "github.com/gofiber/fiber/v2" // "github.com/gofiber/template/html" "wartank/server/serv_web/web_api" "wartank/pkg/types" ) /* Главный тип бота на файбере */ // ServWeb -- главный тип приложения type ServWeb struct { app types.IServer api *web_api.WebApi router *fiber.App block *sync.RWMutex port string // Порт веб-сервера } // NewServWeb -- возвращае тновый *ServFiber func NewServWeb(app types.IServer) (serv *ServWeb, err error) { fmt.Printf("NewServWeb()\n") if app == nil { return nil, fmt.Errorf("NewServWeb(): IApp is nil") } port := os.Getenv("SERVER_PORT") if port == "" { return nil, fmt.Errorf("NewServWeb(): env SERVER_PORT not set") } sf := &ServWeb{ app: app, block: &sync.RWMutex{}, port: port, } // engine := html.New("./static/tmpl", "*.tmpl.html") fiberConfig := fiber.Config{ ServerHeader: "WarTank", BodyLimit: 10 * 1024 * 1024, Concurrency: 512, ReadTimeout: 30 * time.Second, WriteTimeout: 30 * time.Second, IdleTimeout: 30 * time.Second, ReadBufferSize: 20 * 1024, WriteBufferSize: 20 * 1024, AppName: "WarTank", Network: fiber.NetworkTCP4, // Views: engine, } sf.router = fiber.New(fiberConfig) // sf.router.Static("/static", "./static") return sf, nil } // Run -- запускает бота в работу func (sf *ServWeb) Run() error { log.Printf("ServWeb.Run()\n") var err error { sf.api, err = web_api.NewWebApi(sf.app) if err != nil { return fmt.Errorf("ServWeb.Run(): in make WebApi, err=\n\t%w", err) } } sf.api.Run() log.Printf("ServWeb.Run(): listen\n") if err := sf.router.Listen(":" + sf.port); err != nil { panic(fmt.Errorf("ServWeb.Run(): in serving web, err=\n\t%w", err)) } return nil } // Router -- возвращает роутер сервера func (sf *ServWeb) Router() *fiber.App { return sf.router }