| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- // Package kernel -- объект ядра прилоэжения
- //
- // Содержит базовый функционал сервиса
- package kernel
- import (
- "context"
- "fmt"
- "sync"
- "wartank/pkg/components/kernel/keeper"
- "wartank/pkg/components/kernel/slog"
- "wartank/pkg/components/kernel/store"
- "wartank/pkg/components/kernel/wgname"
- "wartank/pkg/types"
- )
- /*
- Базовый объект приложения.
- */
- // Ядро -- объект ядра приложения
- type Ядро struct {
- ctxBg context.Context // Неотменяемый контекст приложения
- ctxApp context.Context // Отменяемый контекст приложения
- fnCancel func() // Функция отмены приложения
- keeper *keeper.Сторож // Сторож системных сигналов
- слог *slog.Слог // Логгер в два вывода
- wg *wgname.WgName // Групповое ожидание частей приложения
- хран types.ИХранилище // Хранилище данных
- блок sync.Mutex
- }
- // НовЯдро -- возвращает новый *Ядро
- func НовЯдро() (types.ИЯдро, error) {
- // timeStart := time.Now().UTC().Format("2006-10-02 15:04:05.000")
- // fmt._rintf("%v\t%v\tCI/CD test\n", cons.SelfName, timeStart)
- сам := &Ядро{
- ctxBg: context.Background(),
- wg: wgname.NewWgName(),
- }
- var ош error
- сам.ctxApp, сам.fnCancel = context.WithCancel(сам.ctxBg)
- сам.хран, ош = store.НовХранилище(сам, "./store")
- if ош != nil {
- return nil, fmt.Errorf("НовЯдро(): in creste IStore, err=%w", ош)
- }
- сам.блок.Lock()
- сам.слог, ош = slog.НовСлог(сам)
- сам.блок.Unlock()
- if ош != nil {
- return nil, fmt.Errorf("НовЯдро(): in creste ISlog, err=%w", ош)
- }
- сам.слог.Отладка("НовЯдро()")
- сам.keeper = keeper.НовСторож(сам)
- return сам, nil
- }
- // Хранилище -- возвращает хранилище данных
- func (сам *Ядро) Хранилище() types.ИХранилище {
- return сам.хран
- }
- // Wg -- возвращает объект групповой сихнронизации
- func (сам *Ядро) Wg() types.IWgName {
- return сам.wg
- }
- // Контекст -- возвращает глобальный контекст приложения
- func (сам *Ядро) Контекст() context.Context {
- return сам.ctxApp
- }
- // Done -- возвращает канал отмены контекста приложения
- func (сам *Ядро) Done() <-chan struct{} {
- return сам.ctxApp.Done()
- }
- // Отменить -- отменяет глобальный контекст приложения
- func (сам *Ядро) Отменить() {
- сам.блок.Lock()
- defer сам.блок.Unlock()
- сам.слог.Инфо("Kernel.CancelApp()\n")
- сам.fnCancel()
- }
- // Слог -- возвращает глобальный лог приложения
- func (сам *Ядро) Слог() types.ИСлог {
- return сам.слог
- }
|