engine_http.go 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. // package mod_http -- http-движок для архитектуры
  2. package engine_http
  3. import (
  4. _ "embed"
  5. "fmt"
  6. "time"
  7. "github.com/gofiber/fiber/v2"
  8. "gitp78su.ipnodns.ru/svi/kern/v3"
  9. "gitp78su.ipnodns.ru/svi/kern/v3/kc/log_buf"
  10. "gitp78su.ipnodns.ru/svi/kern/v3/krn/ktypes"
  11. "gitp78su.ipnodns.ru/svi/goarch/lev0/alias"
  12. "gitp78su.ipnodns.ru/svi/goarch/lev0/cons"
  13. "gitp78su.ipnodns.ru/svi/goarch/lev0/types"
  14. "gitp78su.ipnodns.ru/svi/goarch/lev1/arch_doc"
  15. "gitp78su.ipnodns.ru/svi/goarch/lev1/view_coord"
  16. "gitp78su.ipnodns.ru/svi/goarch/lev1/view_size"
  17. "gitp78su.ipnodns.ru/svi/goarch/lev2/engine_http/http_api"
  18. )
  19. //go:embed index.html
  20. var indexHtml []byte
  21. // CanvasSize -- размер хоста
  22. type CanvasSize struct {
  23. SizeX_ int `form:"w"`
  24. SizeY_ int `form:"h"`
  25. }
  26. func (sf *CanvasSize) String() string {
  27. return fmt.Sprintf("w:%v; h:%v", sf.SizeX_, sf.SizeY_)
  28. }
  29. // EngineHttp -- http-движок для архитектуры
  30. type EngineHttp struct {
  31. // fibApp *fiber.App
  32. kCtx ktypes.IKernelCtx
  33. log ktypes.ILogBuf
  34. diaMode string // Режим диаграммы
  35. canvSize CanvasSize // Размер холста
  36. size types.IViewSize // Размер холста в его координатах
  37. pos types.IViewCoord // Координаты холста
  38. archDoc *arch_doc.ArchDoc // Документ архитектуры
  39. httpApi *http_api.HttpApi
  40. }
  41. // NewEngineHttp -- возвращает новый движок HTTP
  42. func NewEngineHttp() *EngineHttp {
  43. optTerm := log_buf.OptIsTerm(true)
  44. optPref := log_buf.OptPrefix("EngineHttp")
  45. log := log_buf.NewLogBuf(optTerm, optPref)
  46. sf := &EngineHttp{
  47. kCtx: kern.GetKernelCtx(),
  48. log: log,
  49. diaMode: cons.ModeUseCase,
  50. size: view_size.NewViewSize(800, 600),
  51. pos: view_coord.NewViewCoord(0, 0),
  52. archDoc: arch_doc.GetArchDoc(),
  53. httpApi: http_api.NewHttpApi(),
  54. }
  55. sHttp := kern.GetKernelServerHttp()
  56. fibApp := sHttp.Fiber()
  57. fibApp.Static("/static", "./static", fiber.Static{
  58. Compress: true,
  59. Browse: true,
  60. CacheDuration: time.Second * 10,
  61. })
  62. fibApp.Get("/", sf.getIndex)
  63. fibApp.Get("/api/use_case", sf.postSetModeUseCase)
  64. fibApp.Post("/api/canvas/size/set", sf.postSetCanvasSize)
  65. return sf
  66. }
  67. // Устанавливает размер холста
  68. func (sf *EngineHttp) postSetCanvasSize(ctx *fiber.Ctx) error {
  69. err := ctx.BodyParser(&sf.canvSize)
  70. if err != nil {
  71. sf.log.Err("postSetCanvasSize(): on body parser, err=\n\t%v", err)
  72. }
  73. var (
  74. w alias.SizeX
  75. h alias.SizeY
  76. )
  77. if sf.canvSize.SizeX_ > 0 {
  78. w = alias.SizeX(sf.canvSize.SizeX_ - 10)
  79. }
  80. if sf.canvSize.SizeY_ > 0 {
  81. h = alias.SizeY(sf.canvSize.SizeY_ - 10)
  82. }
  83. sf.size = view_size.NewViewSize(w, h)
  84. return ctx.SendString(sf.size.String())
  85. }
  86. // Возвращает картинку архитектуры
  87. func (sf *EngineHttp) postSetModeUseCase(ctx *fiber.Ctx) error {
  88. sf.diaMode = cons.ModeUseCase
  89. return ctx.SendString("[mode='" + sf.diaMode + "']")
  90. }
  91. // Возвращает главную страницу сервиса
  92. func (sf *EngineHttp) getIndex(ctx *fiber.Ctx) error {
  93. ctx.Response().Header.Set("Content-Type", "text/html")
  94. return ctx.Send(indexHtml)
  95. }