service.go 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. // package service -- главный объект сервиса
  2. package service
  3. import (
  4. "context"
  5. "fmt"
  6. "log"
  7. "git.p78su.freemyip.com/svi/gostore/internal/serv_http"
  8. "git.p78su.freemyip.com/svi/gostore/internal/store"
  9. // "git.p78su.freemyip.com/svi/gostore/internal/store_user"
  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. }
  22. // NewService -- возвращает новый объект сервиса
  23. func NewService() (types.IService, error) {
  24. ctxBg := context.Background()
  25. ctx, fnCancel := context.WithCancel(ctxBg)
  26. sf := &Service{
  27. ctxBg: ctxBg,
  28. ctx: ctx,
  29. fnCancel: fnCancel,
  30. }
  31. var err error
  32. sf.disk, err = store.NewStore(sf)
  33. if err != nil {
  34. return nil, fmt.Errorf("NewService(): in create IStoreDisk, err=\n\t%w", err)
  35. }
  36. sf.servHttp, err = serv_http.NewServHttp(sf)
  37. if err != nil {
  38. return nil, fmt.Errorf("NewService(): in create IServHttp, err=\n\t%w", err)
  39. }
  40. return sf, nil
  41. }
  42. // ServHttp -- возвращает HTTP-сервер
  43. func (sf *Service) ServHttp() types.IServHttp {
  44. return sf.servHttp
  45. }
  46. // Store -- возвращает хранилище
  47. func (sf *Service) Store() types.IStore {
  48. return sf.disk
  49. }
  50. // CancelApp -- отменяет контекст приложения
  51. func (sf *Service) CancelApp() {
  52. sf.fnCancel()
  53. }
  54. // Ctx -- возвращает контекст приложения
  55. func (sf *Service) Ctx() context.Context {
  56. return sf.ctx
  57. }
  58. // Run -- запускает сервис в работу
  59. func (sf *Service) Run() error {
  60. go func() {
  61. err := sf.servHttp.Run()
  62. if err != nil {
  63. log.Printf("Service.Run(): in run IServHttp, err=\n\t%v\n", err)
  64. }
  65. }()
  66. <-sf.ctx.Done()
  67. return nil
  68. }