mockkernel.go 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. package mockkernel
  2. import (
  3. "context"
  4. "wartank/pkg/components/kernel/wgname"
  5. "wartank/pkg/types"
  6. )
  7. /*
  8. Мок-объект для имитации объекта ядра приложения.
  9. Нужен из-за возникающей циклической ссылки.
  10. ВНИМАНИЕ!!!!!
  11. Slog_ присваивать руками !!!!
  12. */
  13. // MockKernel -- мок-объект ядра приложения
  14. type MockKernel struct {
  15. ctxBg context.Context // Глобальный неотменяемый контекст приложения
  16. ctxApp context.Context // глобальный отменяемый контекст приложения
  17. fnCancel func() // Функия глобальной отмены контекста приложения
  18. wg *wgname.WgName // Объект группового ожидания
  19. Slog_ types.ISlog // Двойной логер
  20. }
  21. // NewMockKernel -- возвращает новый *MockKernel
  22. func NewMockKernel() *MockKernel {
  23. sf := &MockKernel{
  24. ctxBg: context.Background(),
  25. wg: wgname.NewWgName(),
  26. }
  27. sf.ctxApp, sf.fnCancel = context.WithCancel(sf.ctxBg)
  28. return sf
  29. }
  30. // Wg -- возвращает объект групповой сихнронизации
  31. func (sf *MockKernel) Wg() types.IWgName {
  32. return sf.wg
  33. }
  34. // CtxApp -- возвращает глобальный контекст приложения
  35. func (sf *MockKernel) CtxApp() context.Context {
  36. return sf.ctxApp
  37. }
  38. // Done -- возвращает канал отмены контекста приложения
  39. func (sf *MockKernel) Done() <-chan struct{} {
  40. return sf.ctxApp.Done()
  41. }
  42. // CancelApp -- отменяет глобальный контекст приложения
  43. func (sf *MockKernel) CancelApp() {
  44. // fmt._rintf("MockKernel.CancelApp()\n")
  45. sf.fnCancel()
  46. }
  47. // Slog -- возвращает хранимый логгер
  48. func (sf *MockKernel) Slog() types.ISlog {
  49. return sf.Slog_
  50. }