mod_wui.go 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  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.Ctx().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. // IsWork -- признак работы модуля
  57. func (sf *ModuleWui) IsWork() bool {
  58. return sf.kCtx.Wg().IsWork()
  59. }
  60. // Получает событие из сети
  61. func (sf *ModuleWui) wuiClick(ctx *fiber.Ctx) error {
  62. id := ctx.Params("id")
  63. widget0 := sf.wCtx.Get(id)
  64. if widget0 == nil {
  65. strOut := fmt.Sprintf("ModuleWui.wuiClick(): id(%v), widget not exists", id)
  66. return ctx.SendString(strOut)
  67. }
  68. widget1, isOk := widget0.Val().(IWuiButton)
  69. if !isOk {
  70. strOut := fmt.Sprintf("ModuleWui.wuiClick(): widget(%T) not button", widget0.Val())
  71. return ctx.SendString(strOut)
  72. }
  73. strOut := widget1.Click()
  74. return ctx.SendString(strOut)
  75. }