2 // Copyright © 2011-2018 Guy M. Allard
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
8 // http://www.apache.org/licenses/LICENSE-2.0
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.
25 Unsubscribe from a STOMP subscription.
27 Headers MUST contain a "destination" header key, and for Stomp 1.1+,
28 a "id" header key per the specifications. The subscription MUST currently
29 exist for this session.
32 // Possible additional Header keys: "id".
33 h := stompngo.Headers{stompngo.HK_DESTINATION, "/queue/myqueue"}
36 // Do something sane ...
40 func (c
*Connection
) Unsubscribe(h Headers
) error
{
41 c
.log(UNSUBSCRIBE
, "start", h
)
42 // fmt.Printf("Unsub Headers: %v\n", h)
46 e
:= checkHeaders(h
, c
.Protocol())
51 // Specification Requirements:
52 // 1.0) requires either a destination header or an id header
53 // 1.1) ... requires ... the id header ....
54 // 1.2) an id header MUST be included in the frame
56 _
, okd
:= h
.Contains(HK_DESTINATION
)
57 shid
, oki
:= h
.Contains(HK_ID
)
72 panic("unsubscribe version not supported: " + c
.Protocol())
75 shaid
:= Sha1(h
.Value(HK_DESTINATION
)) // Special for 1.0
77 s1x
, p
:= c
.subs
[shid
]
78 s10
, ps
:= c
.subs
[shaid
] // Special for 1.0
80 var usesp
*subscription
88 return EUNOSID
// id required
90 if !p
{ // subscription does not exist
91 return EBADSID
// invalid subscription-id
102 panic("unsubscribe version not supported: " + c
.Protocol())
105 sdn
, ok
:= h
.Contains(StompPlusDrainNow
) // STOMP Protocol Extension
108 e
= c
.transmitCommon(UNSUBSCRIBE
, h
) // transmitCommon Clones() the headers
114 delete(c
.subs
, usekey
)
116 c
.log(UNSUBSCRIBE
, "end", h
)
120 // STOMP Protocol Extension
122 c
.log("sngdrnow extension detected")
123 idn
, err
:= strconv
.ParseInt(sdn
, 10, 64)
125 idn
= 100 // 100 milliseconds if bad parameter
127 ival
:= time
.Duration(idn
* 1000000)
131 ticker
:= time
.NewTicker(ival
)
133 case mi
, ok
:= <-usesp
.md
:
138 c
.log("sngdrnow DROP", dmc
, mi
.Message
.Command
, mi
.Message
.Headers
)
140 c
.log("sngdrnow extension BREAK")
145 c
.log("sngdrnow extension at very end")
147 delete(c
.subs
, usekey
)
149 c
.log(UNSUBSCRIBE
, "endsngdrnow", h
)