// package mod_wui -- модуль WUI package mod_wui import ( "fmt" "sync" "github.com/gofiber/fiber/v2" "gitp78su.ipnodns.ru/svi/kern/krn/kctx" "gitp78su.ipnodns.ru/svi/kern/krn/kmodule" "gitp78su.ipnodns.ru/svi/kern/krn/kserv_http" . "gitp78su.ipnodns.ru/svi/kern/krn/ktypes" "gitp78su.ipnodns.ru/svi/kern/mds/mod_serv_http/http_api" "gitp78su.ipnodns.ru/svi/kern/mds/mod_serv_http/page_module" "gitp78su.ipnodns.ru/svi/kern/mds/mod_serv_http/page_monolit" "gitp78su.ipnodns.ru/svi/kern/wui" . "gitp78su.ipnodns.ru/svi/kern/wui/wtypes" ) // ModuleWui -- модуль WUI type ModuleWui struct { IKernelModule kCtx IKernelCtx wCtx IWuiCtx kServHttp IKernelServerHttp log ILogBuf } var ( mod *ModuleWui block sync.Mutex ) // GetModuleWui -- возвращает новый модуль WUI func GetModuleWui() *ModuleWui { block.Lock() defer block.Unlock() if mod != nil { return mod } sf := &ModuleWui{ kCtx: kctx.GetKernelCtx(), wCtx: wui.GetWuiCtx(), IKernelModule: kmodule.NewKernelModule("wui"), kServHttp: kserv_http.GetKernelServHttp(), } sf.log = sf.wCtx.Log() _ = page_monolit.GetPageMonolit() _ = page_module.GetPageModule() _ = http_api.NewHttpApi() fibApp := sf.kCtx.Get("fiberApp").Val().(*fiber.App) fibApp.Post("/wui/click/:id", sf.wuiClick) mod = sf return sf } // Run -- запускает модуль в работу func (sf *ModuleWui) Run() { sf.log.Info("ModuleWui.Run(): module=%v, is run", sf.Name()) go sf.kServHttp.Run() } // Log -- возвращает буферный лог func (sf *ModuleWui) Log() ILogBuf { return sf.log } // IsWork -- признак работы модуля func (sf *ModuleWui) IsWork() bool { return sf.kCtx.Wg().IsWork() } // Получает событие из сети func (sf *ModuleWui) wuiClick(ctx *fiber.Ctx) error { id := ctx.Params("id") widget0 := sf.wCtx.Get(id) if widget0 == nil { strOut := fmt.Sprintf("ModuleWui.wuiClick(): id(%v), widget not exists", id) sf.log.Err(strOut) return ctx.SendString(strOut) } widget1, isOk := widget0.Val().(IWuiButton) if !isOk { strOut := fmt.Sprintf("ModuleWui.wuiClick(): widget(%T) not button", widget0.Val()) sf.log.Err(strOut) return ctx.SendString(strOut) } strOut := widget1.Click() return ctx.SendString(strOut) }