mod_serv_http.go 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. // package mod_serv_http -- модуль HTTP-сервера.
  2. package mod_serv_http
  3. import (
  4. "fmt"
  5. "sync"
  6. mL0 "gitp78su.ipnodns.ru/svi/kern/v4/lev0"
  7. "gitp78su.ipnodns.ru/svi/kern/v4/lev0/alias"
  8. mKt "gitp78su.ipnodns.ru/svi/kern/v4/lev0/ktypes"
  9. "gitp78su.ipnodns.ru/svi/kern/v4/lev2/kmodule"
  10. "gitp78su.ipnodns.ru/svi/kern/v4/lev2/kserv_http"
  11. "gitp78su.ipnodns.ru/svi/kern/v4/lev3/mod_serv_http/http_api"
  12. "gitp78su.ipnodns.ru/svi/kern/v4/lev3/mod_serv_http/page_module"
  13. "gitp78su.ipnodns.ru/svi/kern/v4/lev3/mod_serv_http/page_monolit"
  14. )
  15. // ModuleServHttp -- модуль HTTP-сервера.
  16. type ModuleServHttp struct {
  17. mKt.IKernelModule
  18. kServHttp mKt.IKernelServerHttp
  19. log mKt.ILogBuf
  20. }
  21. var (
  22. mod *ModuleServHttp
  23. block sync.RWMutex
  24. )
  25. // GetModuleServHttp -- возвращает новый модуль HTTP-сервера.
  26. func GetModuleServHttp() *mL0.Result[*ModuleServHttp] {
  27. block.Lock()
  28. defer block.Unlock()
  29. if mod != nil {
  30. return mL0.NewRes(mod)
  31. }
  32. modName := alias.NewAModuleName("kServHttp")
  33. resMod := kmodule.NewKernelModule(modName)
  34. if resMod.IsErr() {
  35. err := fmt.Errorf("GetModuleServHttp(): in NewKernelModule, err=\n\t%w", resMod.Err())
  36. return mL0.NewErr[*ModuleServHttp](err)
  37. }
  38. resHttp := kserv_http.GetKernelServHttp()
  39. if resHttp.IsErr() {
  40. err := fmt.Errorf("GetModuleServHttp(): in GetKernelServHttp, err=\n\t%w", resHttp.Err())
  41. return mL0.NewErr[*ModuleServHttp](err)
  42. }
  43. sf := &ModuleServHttp{
  44. IKernelModule: resMod.Val(),
  45. kServHttp: resHttp.Val(),
  46. }
  47. sf.log = sf.Ctx().Log()
  48. _ = page_monolit.GetPageMonolit()
  49. _ = page_module.GetPageModule()
  50. _ = http_api.NewHttpApi()
  51. mod = sf
  52. return mL0.NewRes(sf)
  53. }
  54. // Run -- запускает модуль в работу.
  55. func (sf *ModuleServHttp) Run() {
  56. sf.log.Info("ModuleServHttp.Run(): module=%v, is run", sf.Name())
  57. go sf.kServHttp.Run()
  58. }
  59. // IsWork -- признак работы модуля.
  60. func (sf *ModuleServHttp) IsWork() bool {
  61. return sf.kServHttp.IsWork()
  62. }