MCPcopy
hub / github.com/lonng/nano / Decode

Method Decode

internal/codec/codec.go:71–106  ·  view source on GitHub ↗

Decode decode the network bytes slice to packet.Packet(s) TODO(Warning): shared slice

(data []byte)

Source from the content-addressed store, hash-verified

69// Decode decode the network bytes slice to packet.Packet(s)
70// TODO(Warning): shared slice
71func (c *Decoder) Decode(data []byte) ([]*packet.Packet, error) {
72 c.buf.Write(data)
73
74 var (
75 packets []*packet.Packet
76 err error
77 )
78 // check length
79 if c.buf.Len() < HeadLength {
80 return nil, err
81 }
82
83 // first time
84 if c.size < 0 {
85 if err = c.forward(); err != nil {
86 return nil, err
87 }
88 }
89
90 for c.size <= c.buf.Len() {
91 p := &packet.Packet{Type: packet.Type(c.typ), Length: c.size, Data: c.buf.Next(c.size)}
92 packets = append(packets, p)
93
94 // more packet
95 if c.buf.Len() < HeadLength {
96 c.size = -1
97 break
98 }
99
100 if err = c.forward(); err != nil {
101 return packets, err
102 }
103 }
104
105 return packets, nil
106}
107
108// Encode create a packet.Packet from the raw bytes slice and then encode to network bytes slice
109// Protocol refs: https://github.com/NetEase/pomelo/wiki/Communication-Protocol

Callers 4

TestPackFunction · 0.95
BenchmarkDecoder_DecodeFunction · 0.95
readMethod · 0.80
handleMethod · 0.80

Calls 3

forwardMethod · 0.95
TypeTypeAlias · 0.92
WriteMethod · 0.80

Tested by 2

TestPackFunction · 0.76
BenchmarkDecoder_DecodeFunction · 0.76