package message import ( "fmt" ) // Type represents the type of message, which could be Request/Notify/Response/Push type Type byte // Message types const ( Request Type = 0x00 Notify = 0x01 Response = 0x02 Push = 0x03 ) var types = map[Type]string{ Request: "Request", Notify: "Notify", Response: "Response", Push: "Push", } func (t Type) String() string { return types[t] } // Message represents an unmarshaler message or a message which to be marshaled type Message struct { Type Type // message type (flag) ID uint64 // unique id, zero while notify mode Route string // route for locating service Data []byte // payload compressed bool // if message compressed } // New returns a new message instance func New() *Message { return &Message{} } // String, implementation of fmt.Stringer interface func (m *Message) String() string { return fmt.Sprintf("%s %s (%dbytes)", types[m.Type], m.Route, len(m.Data)) }