| 123456789101112131415161718192021222324252627282930313233343536373839404142434445 |
- package relay
- import (
- "fmt"
- "one-api/dto"
- relaycommon "one-api/relay/common"
- "one-api/service"
- "one-api/types"
- "github.com/gin-gonic/gin"
- "github.com/gorilla/websocket"
- )
- func WssHelper(c *gin.Context, info *relaycommon.RelayInfo) (newAPIError *types.NewAPIError) {
- info.InitChannelMeta(c)
- adaptor := GetAdaptor(info.ApiType)
- if adaptor == nil {
- return types.NewError(fmt.Errorf("invalid api type: %d", info.ApiType), types.ErrorCodeInvalidApiType, types.ErrOptionWithSkipRetry())
- }
- adaptor.Init(info)
- //var requestBody io.Reader
- //firstWssRequest, _ := c.Get("first_wss_request")
- //requestBody = bytes.NewBuffer(firstWssRequest.([]byte))
- statusCodeMappingStr := c.GetString("status_code_mapping")
- resp, err := adaptor.DoRequest(c, info, nil)
- if err != nil {
- return types.NewError(err, types.ErrorCodeDoRequestFailed)
- }
- if resp != nil {
- info.TargetWs = resp.(*websocket.Conn)
- defer info.TargetWs.Close()
- }
- usage, newAPIError := adaptor.DoResponse(c, nil, info)
- if newAPIError != nil {
- // reset status code 重置状态码
- service.ResetStatusCode(newAPIError, statusCodeMappingStr)
- return newAPIError
- }
- service.PostWssConsumeQuota(c, info, info.UpstreamModelName, usage.(*dto.RealtimeUsage), "")
- return nil
- }
|