// package server -- главный тип приложения, содержит бота, интерфейсы и т.п. package server import ( "fmt" "wartank/pkg/components/kernel" "wartank/pkg/store" "wartank/pkg/types" "wartank/server/serv_bots" "wartank/server/serv_gui" "wartank/server/serv_web" ) // Server -- главный тип приложения type Server struct { *kernel.Kernel store types.IStore servWeb *serv_web.ServWeb servBots *serv_bots.ServBots servGui *serv_gui.ServGui } // NewServer -- возвращает новый объект приложения func NewServer() (sf *Server, err error) { kernel, err := kernel.NewKernel() if err != nil { return nil, fmt.Errorf("NewServer(): in make IKernel, err=\n\t%w", err) } sf = &Server{ Kernel: kernel, } sf.store, err = store.NewStore(sf) if err != nil { return nil, fmt.Errorf("NewServer(): in open store, err=%w", err) } sf.servBots, err = serv_bots.NewServBots(sf) if err != nil { return nil, fmt.Errorf("NewServer(): in create ServBots, err=%w", err) } sf.servWeb, err = serv_web.NewServWeb(sf) if err != nil { return nil, fmt.Errorf("NewServer(): in make IServWeb, err=\n\t%w", err) } sf.servGui, err = serv_gui.NewServGui(sf) if err != nil { return nil, fmt.Errorf("NewServer(): in make ServGui, err=\n\t%w", err) } return sf, nil } // Store -- возвращает хранилище func (sf *Server) Store() types.IStore { return sf.store } // Run -- запускает сервер бота в работу func (sf *Server) Run() error { // go sf.bot.Run() if err := sf.servBots.Load(); err != nil { return fmt.Errorf("Server.Run(): in load bots, err=\n\t%w", err) } go sf.servWeb.Run() sf.servGui.Run() <-sf.Done() // if err := sf._erverWeb.Error(); err != nil { // return fmt.Errorf("Server.Run(): in work IServHttp, err=\n\t%w", err) // } // if err := sf.bot.Error(); err != nil { // return fmt.Errorf("Server.Run(): in work IBot, err=\n\t%w", err) // } return nil } // ServWeb -- возвращает веб-сервер func (sf *Server) ServWeb() types.IServWeb { return sf.servWeb } // ServBots -- возвращает словарь ботов func (sf *Server) ServBots() types.IServBots { return sf.servBots }