代码拉取完成,页面将自动刷新
package gateway
import (
"errors"
"io/ioutil"
"net/http"
"net/url"
"strconv"
"github.com/smallnest/rpcx/protocol"
)
const (
XVersion = "X-RPCX-Version"
XMessageType = "X-RPCX-MesssageType"
XHeartbeat = "X-RPCX-Heartbeat"
XOneway = "X-RPCX-Oneway"
XMessageStatusType = "X-RPCX-MessageStatusType"
XSerializeType = "X-RPCX-SerializeType"
XMessageID = "X-RPCX-MessageID"
XServicePath = "X-RPCX-ServicePath"
XServiceMethod = "X-RPCX-ServiceMethod"
XMeta = "X-RPCX-Meta"
XErrorMessage = "X-RPCX-ErrorMessage"
)
func HttpRequest2RpcxRequest(r *http.Request) (*protocol.Message, error) {
req := protocol.NewMessage()
req.SetMessageType(protocol.Request)
h := r.Header
seq := h.Get(XMessageID)
if seq != "" {
id, err := strconv.ParseUint(seq, 10, 64)
if err != nil {
return nil, err
}
req.SetSeq(id)
}
heartbeat := h.Get(XHeartbeat)
if heartbeat != "" {
req.SetHeartbeat(true)
}
oneway := h.Get(XOneway)
if oneway != "" {
req.SetOneway(true)
}
if h.Get("Content-Encoding") == "gzip" {
req.SetCompressType(protocol.Gzip)
}
st := h.Get(XSerializeType)
if st != "" {
rst, err := strconv.Atoi(st)
if err != nil {
return nil, err
}
req.SetSerializeType(protocol.SerializeType(rst))
} else {
return nil, errors.New("empty serialized type")
}
meta := h.Get(XMeta)
if meta != "" {
metadata, err := url.ParseQuery(meta)
if err != nil {
return nil, err
}
mm := make(map[string]string)
for k, v := range metadata {
if len(v) > 0 {
mm[k] = v[0]
}
}
req.Metadata = mm
}
sp := h.Get(XServicePath)
if sp != "" {
req.ServicePath = sp
} else {
return nil, errors.New("empty servicepath")
}
sm := h.Get(XServiceMethod)
if sm != "" {
req.ServiceMethod = sm
} else {
return nil, errors.New("empty servicemethod")
}
payload, err := ioutil.ReadAll(r.Body)
if err != nil {
return nil, err
}
req.Payload = payload
return req, nil
}
// func RpcxResponse2HttpResponse(res *protocol.Message) (url.Values, []byte, error) {
// m := make(url.Values)
// m.Set(XVersion, strconv.Itoa(int(res.Version())))
// if res.IsHeartbeat() {
// m.Set(XHeartbeat, "true")
// }
// if res.IsOneway() {
// m.Set(XOneway, "true")
// }
// if res.MessageStatusType() == protocol.Error {
// m.Set(XMessageStatusType, "Error")
// } else {
// m.Set(XMessageStatusType, "Normal")
// }
// if res.CompressType() == protocol.Gzip {
// m.Set("Content-Encoding", "gzip")
// }
// m.Set(XSerializeType, strconv.Itoa(int(res.SerializeType())))
// m.Set(XMessageID, strconv.FormatUint(res.Seq(), 10))
// m.Set(XServicePath, res.ServicePath)
// m.Set(XServiceMethod, res.ServiceMethod)
// return m, res.Payload, nil
// }
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。