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  }