websocket.go 1.8 KB

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