service.go 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. // package service -- главный объект сервиса
  2. package service
  3. import (
  4. "context"
  5. "fmt"
  6. "sync"
  7. // "git.p78su.freemyip.com/svi/gostore/internal/store_user"
  8. "git.p78su.freemyip.com/svi/gostore/pkg/serv_http"
  9. "git.p78su.freemyip.com/svi/gostore/pkg/store"
  10. "git.p78su.freemyip.com/svi/gostore/pkg/types"
  11. )
  12. // Service -- главный объект сервиса
  13. type Service struct {
  14. // user types.IStoreUser
  15. servHttp types.IServHttp
  16. // dbMem types.IStoreMem
  17. disk types.IStore
  18. ctxBg context.Context // Неотменяемый контекст
  19. ctx context.Context // Контекст приложения
  20. fnCancel func() // Функция отмены контекста
  21. wg *sync.WaitGroup // Ожидатель потоков сервиса
  22. }
  23. // NewService -- возвращает новый объект сервиса
  24. func NewService() (types.IService, error) {
  25. ctxBg := context.Background()
  26. ctx, fnCancel := context.WithCancel(ctxBg)
  27. sf := &Service{
  28. ctxBg: ctxBg,
  29. ctx: ctx,
  30. fnCancel: fnCancel,
  31. wg: &sync.WaitGroup{},
  32. }
  33. var err error
  34. sf.disk, err = store.NewStore(sf)
  35. if err != nil {
  36. return nil, fmt.Errorf("NewService(): in create IStoreDisk, err=\n\t%w", err)
  37. }
  38. sf.servHttp, err = serv_http.NewServHttp(sf)
  39. if err != nil {
  40. return nil, fmt.Errorf("NewService(): in create IServHttp, err=\n\t%w", err)
  41. }
  42. return sf, nil
  43. }
  44. // ServHttp -- возвращает HTTP-сервер
  45. func (sf *Service) ServHttp() types.IServHttp {
  46. return sf.servHttp
  47. }
  48. // Store -- возвращает хранилище
  49. func (sf *Service) Store() types.IStore {
  50. return sf.disk
  51. }
  52. // CancelApp -- отменяет контекст приложения
  53. func (sf *Service) CancelApp() {
  54. sf.fnCancel()
  55. }
  56. // Ctx -- возвращает контекст приложения
  57. func (sf *Service) Ctx() context.Context {
  58. return sf.ctx
  59. }
  60. // Wg -- возвращает ожидатель группы потоков
  61. func (sf *Service) Wg() *sync.WaitGroup {
  62. return sf.wg
  63. }
  64. // Run -- запускает сервис в работу
  65. func (sf *Service) Run() {
  66. go sf.servHttp.Run()
  67. sf.wg.Wait()
  68. }