Address races for conn.connected.
[stompngo.git] / sendbytes.go
blobb4f93896fc5c81040c96b2e03e44ce53c7be467d
1 //
2 // Copyright © 2014-2019 Guy M. Allard
3 //
4 // Licensed under the Apache License, Version 2.0 (the "License");
5 // you may not use this file except in compliance with the License.
6 // You may obtain a copy of the License at
7 //
8 // http://www.apache.org/licenses/LICENSE-2.0
9 //
10 // Unless required by applicable law or agreed to in writing, software
11 // distributed under the License is distributed on an "AS IS" BASIS,
12 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 // See the License for the specific language governing permissions and
14 // limitations under the License.
17 package stompngo
20 Send a STOMP MESSAGE.
22 Headers MUST contain a "destination" header key.
24 The message body (payload) is a slice of bytes, which may be empty.
26 Example:
27 h := stompngo.Headers{stompngo.HK_DESTINATION, "/queue/mymessages"}
28 m := []byte("My message")
29 e := c.Send(h, m)
30 if e != nil {
31 // Do something sane ...
35 func (c *Connection) SendBytes(h Headers, b []byte) error {
36 c.log(SEND, "start", h)
37 if !c.isConnected() {
38 return ECONBAD
40 e := checkHeaders(h, c.Protocol())
41 if e != nil {
42 return e
44 if _, ok := h.Contains(HK_DESTINATION); !ok {
45 return EREQDSTSND
47 ch := h.Clone()
48 f := Frame{SEND, ch, b}
49 r := make(chan error)
50 if e = c.writeWireData(wiredata{f, r}); e != nil {
51 return e
53 e = <-r
54 c.log(SEND, "end", ch)
55 return e // nil or not