package flexCdn import ( "context" "encoding/json" v1 "github.com/go-nunu/nunu-layout-advanced/api/v1" "github.com/go-nunu/nunu-layout-advanced/internal/repository/api/waf" "github.com/go-nunu/nunu-layout-advanced/internal/service" ) type WebsocketService interface { AddWebsocket(ctx context.Context) (int64, error) EnableOrDisable(ctx context.Context,serverId int64,websocketId int64,isOn bool,isPrior bool) error } func NewWebsocketService( service *service.Service, cdn CdnService, webForwardingRep waf.WebForwardingRepository, ) WebsocketService { return &websocketService{ Service: service, cdn: cdn, webForwardingRep: webForwardingRep, } } type websocketService struct { *service.Service cdn CdnService webForwardingRep waf.WebForwardingRepository } func (s *websocketService) AddWebsocket(ctx context.Context) (int64, error) { handshakeTimeout := v1.HandshakeTimeoutJSON{ Unit: "second", Count: 30, } handshakeTimeoutJSON, err := json.Marshal(handshakeTimeout) if err != nil { return 0, err } req := v1.WebSocket{ AllowAllOrigins: true, RequestSameOrigin: true, HandshakeTimeoutJSON: handshakeTimeoutJSON, } id, err := s.cdn.AddWebSockets(ctx, req) if err != nil { return 0, err } return id, nil } func (s *websocketService) EnableOrDisable(ctx context.Context,serverId int64,websocketId int64,isOn bool,isPrior bool) error { webId, err := s.webForwardingRep.GetWebId(ctx, serverId) if err != nil { return err } type WebSocket struct { IsPrior bool `json:"isPrior" form:"isPrior"` IsOn bool `json:"isOn" form:"isOn"` WebsocketId int64 `json:"websocketId" form:"websocketId"` } websocket := WebSocket{ IsPrior: isPrior, IsOn: isOn, WebsocketId: websocketId, } websocketJSON, err := json.Marshal(websocket) if err != nil { return err } if err := s.cdn.EditHTTPWebWebsocket(ctx, webId, websocketJSON); err != nil { return err } return nil }