You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

46 lines
1.4 KiB
Go

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

package server
import (
"fmt"
internalrequest "github.com/noahlann/nnet/internal/request"
protocolpkg "github.com/noahlann/nnet/pkg/protocol"
requestpkg "github.com/noahlann/nnet/pkg/request"
)
// parseProtocolHeader 解析协议帧头(用于路由匹配)
// 简化实现直接使用Protocol.Decode因为消息已由unpacker拆包为完整消息
func parseProtocolHeader(req requestpkg.Request, rawData []byte, protocol protocolpkg.Protocol) error {
// 转换为内部实现类型
reqImpl := internalrequest.AsRequestSetter(req)
if reqImpl == nil {
return fmt.Errorf("invalid request type: request does not support setter methods")
}
if protocol == nil {
return nil
}
// 标准协议解码(提取帧头和数据)
// 注意rawData已经是完整消息由unpacker拆包后提供
protocolHeader, bodyBytes, err := protocol.Decode(rawData)
if err != nil {
return fmt.Errorf("failed to decode protocol: %w", err)
}
// 转换协议帧头为请求帧头
// 默认直接赋值引用,避免拷贝开销
// 如果需要拷贝可以使用Clone方法
var requestHeader requestpkg.FrameHeader
if protocolHeader != nil {
// 直接赋值引用(默认行为,避免拷贝)
requestHeader = protocolHeader
}
// 设置到Request用于路由匹配
reqImpl.SetHeader(requestHeader)
reqImpl.SetDataBytes(bodyBytes)
return nil
}