mod_wui.go 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. // package mod_wui -- модуль WUI
  2. package mod_wui
  3. import (
  4. "fmt"
  5. "sync"
  6. "github.com/gofiber/fiber/v2"
  7. "gitp78su.ipnodns.ru/svi/kern/krn/kctx"
  8. "gitp78su.ipnodns.ru/svi/kern/krn/kmodule"
  9. "gitp78su.ipnodns.ru/svi/kern/krn/kserv_http"
  10. . "gitp78su.ipnodns.ru/svi/kern/krn/ktypes"
  11. "gitp78su.ipnodns.ru/svi/kern/mds/mod_serv_http/http_api"
  12. "gitp78su.ipnodns.ru/svi/kern/mds/mod_serv_http/page_module"
  13. "gitp78su.ipnodns.ru/svi/kern/mds/mod_serv_http/page_monolit"
  14. "gitp78su.ipnodns.ru/svi/kern/wui"
  15. . "gitp78su.ipnodns.ru/svi/kern/wui/wtypes"
  16. )
  17. // ModuleWui -- модуль WUI
  18. type ModuleWui struct {
  19. IKernelModule
  20. kCtx IKernelCtx
  21. wCtx IWuiCtx
  22. kServHttp IKernelServerHttp
  23. log ILogBuf
  24. }
  25. var (
  26. mod *ModuleWui
  27. block sync.Mutex
  28. )
  29. // GetModuleWui -- возвращает новый модуль WUI
  30. func GetModuleWui() *ModuleWui {
  31. block.Lock()
  32. defer block.Unlock()
  33. if mod != nil {
  34. return mod
  35. }
  36. sf := &ModuleWui{
  37. kCtx: kctx.GetKernelCtx(),
  38. wCtx: wui.GetWuiCtx(),
  39. IKernelModule: kmodule.NewKernelModule("wui"),
  40. kServHttp: kserv_http.GetKernelServHttp(),
  41. }
  42. sf.log = sf.wCtx.Log()
  43. _ = page_monolit.GetPageMonolit()
  44. _ = page_module.GetPageModule()
  45. _ = http_api.NewHttpApi()
  46. fibApp := sf.kCtx.Get("fiberApp").Val().(*fiber.App)
  47. fibApp.Post("/wui/click/:id", sf.wuiClick)
  48. mod = sf
  49. return sf
  50. }
  51. // Run -- запускает модуль в работу
  52. func (sf *ModuleWui) Run() {
  53. sf.log.Info("ModuleWui.Run(): module=%v, is run", sf.Name())
  54. go sf.kServHttp.Run()
  55. }
  56. // Log -- возвращает буферный лог
  57. func (sf *ModuleWui) Log() ILogBuf {
  58. return sf.log
  59. }
  60. // IsWork -- признак работы модуля
  61. func (sf *ModuleWui) IsWork() bool {
  62. return sf.kCtx.Wg().IsWork()
  63. }
  64. // Получает событие из сети
  65. func (sf *ModuleWui) wuiClick(ctx *fiber.Ctx) error {
  66. id := ctx.Params("id")
  67. widget0 := sf.wCtx.Get(id)
  68. if widget0 == nil {
  69. strOut := fmt.Sprintf("ModuleWui.wuiClick(): id(%v), widget not exists", id)
  70. sf.log.Err(strOut)
  71. return ctx.SendString(strOut)
  72. }
  73. widget1, isOk := widget0.Val().(IWuiButton)
  74. if !isOk {
  75. strOut := fmt.Sprintf("ModuleWui.wuiClick(): widget(%T) not button", widget0.Val())
  76. sf.log.Err(strOut)
  77. return ctx.SendString(strOut)
  78. }
  79. strOut := widget1.Click()
  80. return ctx.SendString(strOut)
  81. }