websocket.go 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. package flexCdn
  2. import (
  3. "context"
  4. "encoding/json"
  5. v1 "github.com/go-nunu/nunu-layout-advanced/api/v1"
  6. "github.com/go-nunu/nunu-layout-advanced/internal/repository/api/waf"
  7. "github.com/go-nunu/nunu-layout-advanced/internal/service"
  8. )
  9. type WebsocketService interface {
  10. AddWebsocket(ctx context.Context) (int64, error)
  11. EnableOrDisable(ctx context.Context,serverId int64,websocketId int64,isOn bool,isPrior bool) error
  12. }
  13. func NewWebsocketService(
  14. service *service.Service,
  15. cdn CdnService,
  16. webForwardingRep waf.WebForwardingRepository,
  17. ) WebsocketService {
  18. return &websocketService{
  19. Service: service,
  20. cdn: cdn,
  21. webForwardingRep: webForwardingRep,
  22. }
  23. }
  24. type websocketService struct {
  25. *service.Service
  26. cdn CdnService
  27. webForwardingRep waf.WebForwardingRepository
  28. }
  29. func (s *websocketService) AddWebsocket(ctx context.Context) (int64, error) {
  30. handshakeTimeout := v1.HandshakeTimeoutJSON{
  31. Unit: "second",
  32. Count: 30,
  33. }
  34. handshakeTimeoutJSON, err := json.Marshal(handshakeTimeout)
  35. if err != nil {
  36. return 0, err
  37. }
  38. req := v1.WebSocket{
  39. AllowAllOrigins: true,
  40. RequestSameOrigin: true,
  41. HandshakeTimeoutJSON: handshakeTimeoutJSON,
  42. }
  43. id, err := s.cdn.AddWebSockets(ctx, req)
  44. if err != nil {
  45. return 0, err
  46. }
  47. return id, nil
  48. }
  49. func (s *websocketService) EnableOrDisable(ctx context.Context,serverId int64,websocketId int64,isOn bool,isPrior bool) error {
  50. webId, err := s.webForwardingRep.GetWebId(ctx, serverId)
  51. if err != nil {
  52. return err
  53. }
  54. type WebSocket struct {
  55. IsPrior bool `json:"isPrior" form:"isPrior"`
  56. IsOn bool `json:"isOn" form:"isOn"`
  57. WebsocketId int64 `json:"websocketId" form:"websocketId"`
  58. }
  59. websocket := WebSocket{
  60. IsPrior: isPrior,
  61. IsOn: isOn,
  62. WebsocketId: websocketId,
  63. }
  64. websocketJSON, err := json.Marshal(websocket)
  65. if err != nil {
  66. return err
  67. }
  68. if err := s.cdn.EditHTTPWebWebsocket(ctx, webId, websocketJSON); err != nil {
  69. return err
  70. }
  71. return nil
  72. }