server.go 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. // package server -- главный тип приложения, содержит бота, интерфейсы и т.п.
  2. package server
  3. import (
  4. "fmt"
  5. "wartank/pkg/components/kernel"
  6. "wartank/pkg/store"
  7. "wartank/pkg/types"
  8. "wartank/server/serv_bots"
  9. "wartank/server/serv_rpc"
  10. )
  11. // Server -- главный тип приложения
  12. type Server struct {
  13. *kernel.Kernel
  14. store types.IStore
  15. servRpc *serv_rpc.ServRpc
  16. servBots *serv_bots.ServBots
  17. }
  18. // NewServer -- возвращает новый объект приложения
  19. func NewServer() (sf *Server, err error) {
  20. kernel, err := kernel.NewKernel()
  21. if err != nil {
  22. return nil, fmt.Errorf("NewServer(): in make IKernel, err=\n\t%w", err)
  23. }
  24. sf = &Server{
  25. Kernel: kernel,
  26. }
  27. sf.store, err = store.NewStore(sf)
  28. if err != nil {
  29. return nil, fmt.Errorf("NewServer(): in open store, err=%w", err)
  30. }
  31. sf.servBots, err = serv_bots.NewServBots(sf)
  32. if err != nil {
  33. return nil, fmt.Errorf("NewServer(): in create ServBots, err=%w", err)
  34. }
  35. sf.servRpc, err = serv_rpc.NewServRpc(sf)
  36. if err != nil {
  37. return nil, fmt.Errorf("NewServer(): in make IServRpc, err=\n\t%w", err)
  38. }
  39. return sf, nil
  40. }
  41. // Store -- возвращает хранилище
  42. func (sf *Server) Store() types.IStore {
  43. return sf.store
  44. }
  45. // Run -- запускает сервер бота в работу
  46. func (sf *Server) Run() error {
  47. // go sf.bot.Run()
  48. if err := sf.servBots.Load(); err != nil {
  49. return fmt.Errorf("Server.Run(): in load bots, err=\n\t%w", err)
  50. }
  51. go sf.servRpc.Run()
  52. <-sf.Done()
  53. // if err := sf._erverWeb.Error(); err != nil {
  54. // return fmt.Errorf("Server.Run(): in work IServHttp, err=\n\t%w", err)
  55. // }
  56. // if err := sf.bot.Error(); err != nil {
  57. // return fmt.Errorf("Server.Run(): in work IBot, err=\n\t%w", err)
  58. // }
  59. return nil
  60. }
  61. // ServBots -- возвращает словарь ботов
  62. func (sf *Server) ServBots() types.IServBots {
  63. return sf.servBots
  64. }