69 lines
1.8 KiB
Go
69 lines
1.8 KiB
Go
package stomp
|
|
|
|
import (
|
|
"io"
|
|
"github.com/go-stomp/stomp/v3/frame"
|
|
)
|
|
|
|
// A Message represents a message received from the STOMP server.
|
|
// In most cases a message corresponds to a single STOMP MESSAGE frame
|
|
// received from the STOMP server. If, however, the Err field is non-nil,
|
|
// then the message corresponds to a STOMP ERROR frame, or a connection
|
|
// error between the client and the server.
|
|
type Message struct {
|
|
// Indicates whether an error was received on the subscription.
|
|
// The error will contain details of the error. If the server
|
|
// sent an ERROR frame, then the Body, ContentType and Header fields
|
|
// will be populated according to the contents of the ERROR frame.
|
|
Err error
|
|
|
|
// Destination the message has been sent to.
|
|
Destination string
|
|
|
|
// MIME content type.
|
|
ContentType string // MIME content
|
|
|
|
// Connection that the message was received on.
|
|
Conn *Conn
|
|
|
|
// Subscription associated with the message.
|
|
Subscription *Subscription
|
|
|
|
// Optional header entries. When received from the server,
|
|
// these are the header entries received with the message.
|
|
Header *frame.Header
|
|
|
|
// The message body, which is an arbitrary sequence of bytes.
|
|
// The ContentType indicates the format of this body.
|
|
Body []byte // Content of message
|
|
}
|
|
|
|
// ShouldAck returns true if this message should be acknowledged to
|
|
// the STOMP server that sent it.
|
|
func (msg *Message) ShouldAck() bool {
|
|
if msg.Subscription == nil {
|
|
// not received from the server, so no acknowledgement required
|
|
return false
|
|
}
|
|
|
|
return msg.Subscription.AckMode() != AckAuto
|
|
}
|
|
|
|
func (msg *Message) Read(p []byte) (int, error) {
|
|
if len(msg.Body) == 0 {
|
|
return 0, io.EOF
|
|
}
|
|
n := copy(p, msg.Body)
|
|
msg.Body = msg.Body[n:]
|
|
return n, nil
|
|
}
|
|
|
|
func (msg *Message) ReadByte() (byte, error) {
|
|
if len(msg.Body) == 0 {
|
|
return 0, io.EOF
|
|
}
|
|
n := msg.Body[0]
|
|
msg.Body = msg.Body[1:]
|
|
return n, nil
|
|
}
|