Skip to content

Commit

Permalink
Support for AutoAckOff
Browse files Browse the repository at this point in the history
  • Loading branch information
shivamkm07 committed Jan 6, 2022
1 parent 2d3b04d commit 6e59e47
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 3 deletions.
12 changes: 12 additions & 0 deletions message.go
Expand Up @@ -36,6 +36,8 @@ type Message interface {
MessageID() uint16
Payload() []byte
Ack()
NoAutoAck() bool
AutoAckOff()
}

type message struct {
Expand All @@ -47,6 +49,7 @@ type message struct {
payload []byte
once sync.Once
ack func()
noautoack bool
}

func (m *message) Duplicate() bool {
Expand Down Expand Up @@ -77,6 +80,14 @@ func (m *message) Ack() {
m.once.Do(m.ack)
}

func (m *message) NoAutoAck() bool {
return m.noautoack
}

func (m *message) AutoAckOff() {
m.noautoack = true
}

func messageFromPublish(p *packets.PublishPacket, ack func()) Message {
return &message{
duplicate: p.Dup,
Expand All @@ -86,6 +97,7 @@ func messageFromPublish(p *packets.PublishPacket, ack func()) Message {
messageID: p.MessageID,
payload: p.Payload,
ack: ack,
noautoack: false,
}
}

Expand Down
12 changes: 9 additions & 3 deletions router.go
Expand Up @@ -186,7 +186,9 @@ func (r *router) matchAndDispatch(messages <-chan *packets.PublishPacket, order
wg.Add(1)
go func() {
hd(client, m)
m.Ack()
if !m.NoAutoAck() {
m.Ack()
}
wg.Done()
}()
}
Expand All @@ -201,7 +203,9 @@ func (r *router) matchAndDispatch(messages <-chan *packets.PublishPacket, order
wg.Add(1)
go func() {
r.defaultHandler(client, m)
m.Ack()
if !m.NoAutoAck() {
m.Ack()
}
wg.Done()
}()
}
Expand All @@ -212,7 +216,9 @@ func (r *router) matchAndDispatch(messages <-chan *packets.PublishPacket, order
r.RUnlock()
for _, handler := range handlers {
handler(client, m)
m.Ack()
if !m.NoAutoAck() {
m.Ack()
}
}
// DEBUG.Println(ROU, "matchAndDispatch handled message")
}
Expand Down

0 comments on commit 6e59e47

Please sign in to comment.