engine_http.go 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. // package mod_http -- http-движок для архитектуры
  2. package engine_http
  3. import (
  4. _ "embed"
  5. "time"
  6. "github.com/gofiber/fiber/v2"
  7. "gitp78su.ipnodns.ru/svi/kern/v3"
  8. "gitp78su.ipnodns.ru/svi/kern/v3/kc/log_buf"
  9. "gitp78su.ipnodns.ru/svi/kern/v3/krn/ktypes"
  10. "gitp78su.ipnodns.ru/svi/goarch/lev0/cons"
  11. "gitp78su.ipnodns.ru/svi/goarch/lev0/types"
  12. "gitp78su.ipnodns.ru/svi/goarch/lev1/arch_doc"
  13. "gitp78su.ipnodns.ru/svi/goarch/lev1/view_coord"
  14. "gitp78su.ipnodns.ru/svi/goarch/lev2/engine_http/http_api"
  15. )
  16. //go:embed index.html
  17. var indexHtml []byte
  18. // EngineHttp -- http-движок для архитектуры
  19. type EngineHttp struct {
  20. // fibApp *fiber.App
  21. kCtx ktypes.IKernelCtx
  22. log ktypes.ILogBuf
  23. diaMode string // Режим диаграммы
  24. pos types.IViewCoord // Координаты холста
  25. archDoc *arch_doc.ArchDoc // Документ архитектуры
  26. httpApi *http_api.HttpApi
  27. }
  28. // NewEngineHttp -- возвращает новый движок HTTP
  29. func NewEngineHttp() *EngineHttp {
  30. optTerm := log_buf.OptIsTerm(true)
  31. optPref := log_buf.OptPrefix("EngineHttp")
  32. log := log_buf.NewLogBuf(optTerm, optPref)
  33. sf := &EngineHttp{
  34. kCtx: kern.GetKernelCtx(),
  35. log: log,
  36. diaMode: cons.ModeUseCase,
  37. pos: view_coord.NewViewCoord(0, 0),
  38. archDoc: arch_doc.GetArchDoc(),
  39. httpApi: http_api.NewHttpApi(),
  40. }
  41. sHttp := kern.GetKernelServerHttp()
  42. fibApp := sHttp.Fiber()
  43. fibApp.Static("/static", "./static", fiber.Static{
  44. Compress: true,
  45. Browse: true,
  46. CacheDuration: time.Second * 10,
  47. })
  48. fibApp.Get("/", sf.getIndex)
  49. fibApp.Get("/api/use_case", sf.postSetModeUseCase)
  50. return sf
  51. }
  52. // Возвращает картинку архитектуры
  53. func (sf *EngineHttp) postSetModeUseCase(ctx *fiber.Ctx) error {
  54. sf.diaMode = cons.ModeUseCase
  55. return ctx.SendString("[mode='" + sf.diaMode + "']")
  56. }
  57. // Возвращает главную страницу сервиса
  58. func (sf *EngineHttp) getIndex(ctx *fiber.Ctx) error {
  59. ctx.Response().Header.Set("Content-Type", "text/html")
  60. return ctx.Send(indexHtml)
  61. }