kernel.go 3.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. // Package kernel -- объект ядра приложения
  2. //
  3. // Содержит базовый функционал сервиса
  4. package kernel
  5. import (
  6. "context"
  7. "sync"
  8. "wartank/pkg/components/kernel/keeper"
  9. "wartank/pkg/components/kernel/logger"
  10. "wartank/pkg/components/kernel/store"
  11. "wartank/pkg/components/kernel/wgname"
  12. "wartank/pkg/types"
  13. )
  14. /*
  15. Базовый объект приложения.
  16. */
  17. // Ядро -- объект ядра приложения
  18. type Ядро struct {
  19. ctxBg context.Context // Неотменяемый контекст приложения
  20. ctxApp context.Context // Отменяемый контекст приложения
  21. fnCancel func() // Функция отмены приложения
  22. keeper *keeper.Сторож // Сторож системных сигналов
  23. лог types.ИЛоггер // Логгер в два вывода
  24. wg *wgname.WgName // Групповое ожидание частей приложения
  25. хран types.ИХранилище // Хранилище данных
  26. блок sync.Mutex
  27. }
  28. // НовЯдро -- возвращает новый *Ядро
  29. func НовЯдро() types.ИЯдро {
  30. лог := logger.НовЛоггер("Ядро")
  31. лог.Инфо("НовЯдро()\n")
  32. // timeStart := time.Now().UTC().Format("2006-10-02 15:04:05.000")
  33. // fmt._rintf("%v\t%v\tCI/CD test\n", cons.SelfName, timeStart)
  34. сам := &Ядро{
  35. ctxBg: context.Background(),
  36. wg: wgname.NewWgName(),
  37. лог: лог,
  38. }
  39. var ош error
  40. сам.ctxApp, сам.fnCancel = context.WithCancel(сам.ctxBg)
  41. сам.хран, ош = store.НовХранилище(сам, "./store")
  42. сам.лог.Паника(сам.хран == nil, "НовЯдро(): при создании ИХранилище, ош=\n\t%v\n", ош)
  43. сам.блок.Lock()
  44. сам.лог = logger.НовЛоггер("Ядро")
  45. сам.блок.Unlock()
  46. сам.лог.Отладка("НовЯдро()")
  47. сам.keeper = keeper.НовСторож(сам)
  48. return сам
  49. }
  50. // Хранилище -- возвращает хранилище данных
  51. func (сам *Ядро) Хранилище() types.ИХранилище {
  52. return сам.хран
  53. }
  54. // Wg -- возвращает объект групповой синхронизации
  55. func (сам *Ядро) Wg() types.IWgName {
  56. return сам.wg
  57. }
  58. // Контекст -- возвращает глобальный контекст приложения
  59. func (сам *Ядро) Контекст() context.Context {
  60. return сам.ctxApp
  61. }
  62. // Done -- возвращает канал отмены контекста приложения
  63. func (сам *Ядро) Done() <-chan struct{} {
  64. return сам.ctxApp.Done()
  65. }
  66. // Отменить -- отменяет глобальный контекст приложения
  67. func (сам *Ядро) Отменить() {
  68. сам.блок.Lock()
  69. defer сам.блок.Unlock()
  70. сам.лог.Инфо("Kernel.CancelApp()\n")
  71. сам.fnCancel()
  72. }
  73. // Слог -- возвращает глобальный лог приложения
  74. func (сам *Ядро) Слог() types.ИЛоггер {
  75. return сам.лог
  76. }