github.com/artisanhe/tools@v1.0.1-0.20210607022958-19a8fef2eb04/catgo/cat-go/message/encoder.go (about) 1 package message 2 3 import ( 4 "bytes" 5 ) 6 7 type Encoder interface { 8 EncodeHeader(*bytes.Buffer, *Header) error 9 EncodeMessage(*bytes.Buffer, Messager) error 10 EncodeTransaction(*bytes.Buffer, *Transaction) error 11 EncodeEvent(*bytes.Buffer, *Event) error 12 EncodeHeartbeat(*bytes.Buffer, *Heartbeat) error 13 EncodeMetric(*bytes.Buffer, *Metric) error 14 } 15 16 type encoderBase struct { 17 } 18 19 func encodeMessage(encoder Encoder, buf *bytes.Buffer, message Messager) (err error) { 20 switch m := message.(type) { 21 case *Transaction: 22 return encoder.EncodeTransaction(buf, m) 23 case *Event: 24 return encoder.EncodeEvent(buf, m) 25 case *Heartbeat: 26 return encoder.EncodeHeartbeat(buf, m) 27 case *Metric: 28 return encoder.EncodeMetric(buf, m) 29 default: 30 // TODO unsupported message type. 31 return 32 } 33 } 34 35 func (e *encoderBase) EncodeHeader(buf *bytes.Buffer, header *Header) (err error) { 36 if _, err = buf.WriteString(BinaryProtocol); err != nil { 37 return 38 } 39 if err = writeString(buf, header.Domain); err != nil { 40 return 41 } 42 if err = writeString(buf, header.Hostname); err != nil { 43 return 44 } 45 if err = writeString(buf, header.Ip); err != nil { 46 return 47 } 48 49 if err = writeString(buf, defaultThreadGroupName); err != nil { 50 return 51 } 52 if err = writeString(buf, defaultThreadId); err != nil { 53 return 54 } 55 if err = writeString(buf, defaultThreadName); err != nil { 56 return 57 } 58 59 if err = writeString(buf, header.MessageId); err != nil { 60 return 61 } 62 if err = writeString(buf, header.ParentMessageId); err != nil { 63 return 64 } 65 if err = writeString(buf, header.RootMessageId); err != nil { 66 return 67 } 68 69 // sessionToken. 70 if err = writeString(buf, ""); err != nil { 71 return 72 } 73 return 74 }