scene.go 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. // package scene -- базовая сцена для любой сцены
  2. package scene
  3. import (
  4. "context"
  5. "fmt"
  6. "wartank/pkg/alias"
  7. "wartank/pkg/components/web_log"
  8. "wartank/pkg/scene/scene_mode"
  9. "wartank/pkg/types"
  10. )
  11. type Сцена struct {
  12. бот types.ИБот
  13. сценаИмя alias.СценаИмя
  14. кнт context.Context
  15. фнОтмена func()
  16. режим types.ИСценаРежим
  17. лог types.ИВебЛог
  18. }
  19. // НовСцена -- возвращает новую сцену
  20. func НовСцена(бот types.ИБот, сценаИмя alias.СценаИмя) (types.ИСцена, error) {
  21. if бот == nil {
  22. return nil, fmt.Errorf("НовСцена(): ИБот==nil")
  23. }
  24. if сценаИмя == "" {
  25. return nil, fmt.Errorf("НовСцена(): сценаИмя не задано")
  26. }
  27. кнт, фнОтмена := context.WithCancel(бот.Контекст())
  28. сам := &Сцена{
  29. бот: бот,
  30. сценаИмя: сценаИмя,
  31. кнт: кнт,
  32. фнОтмена: фнОтмена,
  33. режим: scene_mode.НовСценаРежим(),
  34. лог: web_log.НовВебЛог(true),
  35. }
  36. return сам, nil
  37. }
  38. // Лог -- возвращает лог сцены
  39. func (сам *Сцена) Лог() types.ИВебЛог {
  40. return сам.лог
  41. }
  42. // СценаРежим -- текущий режим работы
  43. func (сам *Сцена) СценаРежим() types.ИСценаРежим {
  44. return сам.режим
  45. }
  46. // Отмена -- отменяет контекст сцены
  47. func (сам *Сцена) Отмена() {
  48. сам.фнОтмена()
  49. }
  50. // Кнт -- возвращает контекст сцены
  51. func (сам *Сцена) Контекст() context.Context {
  52. return сам.кнт
  53. }
  54. // Имя -- возвращает имя сцены
  55. func (сам *Сцена) Имя() alias.СценаИмя {
  56. return сам.сценаИмя
  57. }
  58. // Бот -- возвращает бота сцены
  59. func (сам *Сцена) Бот() types.ИБот {
  60. return сам.бот
  61. }