| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- // Package kernel -- объект ядра прилоэжения
- //
- // Содержит базовый функционал сервиса
- package kernel
- import (
- "context"
- "fmt"
- "sync"
- // "time"
- "wartank/pkg/components/kernel/keeper"
- "wartank/pkg/components/kernel/slog"
- "wartank/pkg/components/kernel/wgname"
- "wartank/pkg/types"
- )
- /*
- Базовый объект приложения.
- */
- // Kernel -- объект ядра приложения
- type Kernel struct {
- ctxBg context.Context // Неотменяемый контекст приложения
- ctxApp context.Context // Отменяемый контекст приложения
- fnCancel func() // Функция отмены приложения
- keeper *keeper.Keeper // Сторож системных сигналов
- slog *slog.Slog // Логгер в два вывода
- wg *wgname.WgName // Групповое ожидание частей приложения
- block sync.Mutex
- }
- // NewKernel -- возвращает новый *Kernel
- func NewKernel() (sf *Kernel, err 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)
- sf = &Kernel{
- ctxBg: context.Background(),
- wg: wgname.NewWgName(),
- }
- sf.ctxApp, sf.fnCancel = context.WithCancel(sf.ctxBg)
- sf.block.Lock()
- sf.slog, err = slog.NewSlog(sf)
- sf.block.Unlock()
- if err != nil {
- return nil, fmt.Errorf("NewKernel(): in creste ISlog, err=%w", err)
- }
- sf.slog.Debugf("NewKernel()")
- sf.keeper = keeper.NewKeeper(sf)
- return sf, nil
- }
- // Wg -- возвращает объект групповой сихнронизации
- func (sf *Kernel) Wg() types.IWgName {
- return sf.wg
- }
- // CtxApp -- возвращает глобальный контекст приложения
- func (sf *Kernel) CtxApp() context.Context {
- return sf.ctxApp
- }
- // Done -- возвращает канал отмены контекста приложения
- func (sf *Kernel) Done() <-chan struct{} {
- return sf.ctxApp.Done()
- }
- // CancelApp -- отменяет глобальный контекст приложения
- func (sf *Kernel) CancelApp() {
- sf.block.Lock()
- defer sf.block.Unlock()
- sf.slog.Infof("Kernel.CancelApp()\n")
- sf.fnCancel()
- }
- // Slog -- возвращает глобальный лог приложения
- func (sf *Kernel) Slog() types.ISlog {
- return sf.slog
- }
|