github.com/hdt3213/godis@v1.2.9/cluster/multi_helper.go (about) 1 package cluster 2 3 import ( 4 "bytes" 5 "encoding/base64" 6 "github.com/hdt3213/godis/redis/parser" 7 "github.com/hdt3213/godis/redis/protocol" 8 ) 9 10 func encodeCmdLine(cmdLines []CmdLine) [][]byte { 11 var result [][]byte 12 for _, line := range cmdLines { 13 raw := protocol.MakeMultiBulkReply(line).ToBytes() 14 encoded := make([]byte, base64.StdEncoding.EncodedLen(len(raw))) 15 base64.StdEncoding.Encode(encoded, raw) 16 result = append(result, encoded) 17 } 18 return result 19 } 20 21 func parseEncodedMultiRawReply(args [][]byte) (*protocol.MultiRawReply, error) { 22 cmdBuf := new(bytes.Buffer) 23 for _, arg := range args { 24 dbuf := make([]byte, base64.StdEncoding.DecodedLen(len(arg))) 25 n, err := base64.StdEncoding.Decode(dbuf, arg) 26 if err != nil { 27 continue 28 } 29 cmdBuf.Write(dbuf[:n]) 30 } 31 cmds, err := parser.ParseBytes(cmdBuf.Bytes()) 32 if err != nil { 33 return nil, protocol.MakeErrReply(err.Error()) 34 } 35 return protocol.MakeMultiRawReply(cmds), nil 36 } 37 38 func encodeMultiRawReply(src *protocol.MultiRawReply) *protocol.MultiBulkReply { 39 args := make([][]byte, 0, len(src.Replies)) 40 for _, rep := range src.Replies { 41 raw := rep.ToBytes() 42 encoded := make([]byte, base64.StdEncoding.EncodedLen(len(raw))) 43 base64.StdEncoding.Encode(encoded, raw) 44 args = append(args, encoded) 45 } 46 return protocol.MakeMultiBulkReply(args) 47 }