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

common_global_end_request_codec.go 1.0 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. package codec
  2. import (
  3. "github.com/fagongzi/goetty"
  4. )
  5. import (
  6. "github.com/seata/seata-go/pkg/protocol/message"
  7. )
  8. type CommonGlobalEndRequestCodec struct {
  9. }
  10. func (c *CommonGlobalEndRequestCodec) Encode(in interface{}) []byte {
  11. req, _ := in.(message.AbstractGlobalEndRequest)
  12. buf := goetty.NewByteBuf(0)
  13. Write16String(req.Xid, buf)
  14. Write16String(string(req.ExtraData), buf)
  15. return buf.RawBuf()
  16. }
  17. func (c *CommonGlobalEndRequestCodec) Decode(in []byte) interface{} {
  18. res := message.AbstractGlobalEndRequest{}
  19. buf := goetty.NewByteBuf(len(in))
  20. buf.Write(in)
  21. var xidLen int
  22. if buf.Readable() >= 2 {
  23. xidLen = int(ReadUInt16(buf))
  24. }
  25. if buf.Readable() >= xidLen {
  26. xidBytes := make([]byte, xidLen)
  27. xidBytes = Read(buf, xidBytes)
  28. res.Xid = string(xidBytes)
  29. }
  30. var extraDataLen int
  31. if buf.Readable() >= 2 {
  32. extraDataLen = int(ReadUInt16(buf))
  33. }
  34. if buf.Readable() >= extraDataLen {
  35. extraDataBytes := make([]byte, xidLen)
  36. extraDataBytes = Read(buf, extraDataBytes)
  37. res.ExtraData = extraDataBytes
  38. }
  39. return res
  40. }

Go Implementation For Seata