Преглед изворни кода

feat(service): 添加 WebSocket 服务- 实现了 WebsocketService接口,提供添加 WebSocket 和启用/禁用 WebSocket 的功能
- 新增 websocketService 结构体,包含必要的依赖和服务方法
- 实现了 AddWebsocket 方法,用于添加新的 WebSocket 配置
- 实现了 EnableOrDisable 方法,用于启用或禁用特定的 WebSocket

fusu пре 1 месец
родитељ
комит
51ea1c6902
1 измењених фајлова са 79 додато и 0 уклоњено
  1. 79 0
      internal/service/websocket.go

+ 79 - 0
internal/service/websocket.go

@@ -0,0 +1,79 @@
+package service
+
+import (
+	"context"
+	"encoding/json"
+	v1 "github.com/go-nunu/nunu-layout-advanced/api/v1"
+	"github.com/go-nunu/nunu-layout-advanced/internal/repository"
+)
+
+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,
+	cdn CdnService,
+	webForwardingRep repository.WebForwardingRepository,
+) WebsocketService {
+	return &websocketService{
+		Service:        service,
+		cdn: cdn,
+		webForwardingRep: webForwardingRep,
+	}
+}
+
+type websocketService struct {
+	*Service
+	cdn CdnService
+	webForwardingRep repository.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
+}