| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192 |
- // package service -- главный объект сервиса
- package service
- import (
- "context"
- "fmt"
- "log"
- "git.p78su.freemyip.com/svi/gostore/internal/serv_http"
- "git.p78su.freemyip.com/svi/gostore/internal/store_disk"
- "git.p78su.freemyip.com/svi/gostore/internal/store_mem"
- "git.p78su.freemyip.com/svi/gostore/internal/store_user"
- "git.p78su.freemyip.com/svi/gostore/pkg/types"
- )
- // Service -- главный объект сервиса
- type Service struct {
- user types.IStoreUser
- servHttp types.IServHttp
- dbMem types.IStoreMem
- dbDisk types.IStoreDisk
- ctxBg context.Context // Неотменяемый контекст
- ctx context.Context // Контекст приложения
- fnCancel func() // Функция отмены контекста
- }
- // NewService -- возвращает новый объект сервиса
- func NewService() (types.IService, error) {
- user, err := store_user.NewStoreUser()
- if err != nil {
- return nil, fmt.Errorf("NewService(): in create IStoreUser, err=\n\t%w", err)
- }
- ctxBg := context.Background()
- ctx, fnCancel := context.WithCancel(ctxBg)
- sf := &Service{
- user: user,
- ctxBg: ctxBg,
- ctx: ctx,
- fnCancel: fnCancel,
- }
- sf.dbMem, err = store_mem.NewStoreMem()
- if err != nil {
- return nil, fmt.Errorf("NewService(): in create IStoreMem, err=\n\t%w", err)
- }
- sf.dbDisk, err = store_disk.NewStoreDisk(sf)
- if err != nil {
- return nil, fmt.Errorf("NewService(): in create IStoreDisk, err=\n\t%w", err)
- }
- sf.servHttp, err = serv_http.NewServHttp(sf)
- if err != nil {
- return nil, fmt.Errorf("NewService(): in create IServHttp, err=\n\t%w", err)
- }
- return sf, nil
- }
- // User -- возвращает хпользователя для авторизации на сервере
- func (sf *Service) User() types.IStoreUser {
- return sf.user
- }
- // StoreDisk -- возвращает хранилище на диске
- func (sf *Service) StoreDisk() types.IStoreDisk {
- return sf.dbDisk
- }
- // StoreMem -- возвращает хранилище в памяти
- func (sf *Service) StoreMem() types.IStoreMem {
- return sf.dbMem
- }
- // CancelApp -- отменяет контекст приложения
- func (sf *Service) CancelApp() {
- sf.fnCancel()
- }
- // Ctx -- возвращает контекст приложения
- func (sf *Service) Ctx() context.Context {
- return sf.ctx
- }
- // Run -- запускает сервис в работу
- func (sf *Service) Run() error {
- go func() {
- err := sf.servHttp.Run()
- if err != nil {
- log.Printf("Service.Run(): in run IServHttp, err=\n\t%v\n", err)
- }
- }()
- <-sf.ctx.Done()
- return nil
- }
|