Skip to content

Commit f44b18c

Browse files
committed
feat: Add recvTimeout function to the subscriber so it's possible to check for publish message without blocking
1 parent ae9b5cf commit f44b18c

File tree

1 file changed

+18
-0
lines changed

1 file changed

+18
-0
lines changed

subscriberchannel.go

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package mqtt
33
import (
44
"fmt"
55
"sync"
6+
"time"
67
)
78

89
// MessageReceiver that allows receiving subscribed messages
@@ -35,6 +36,23 @@ func (m *MessageReceiver) Recv() (*Publish, error) {
3536
return element, nil
3637
}
3738

39+
func (m *MessageReceiver) recvTimeout(timeoutMs uint) (*Publish, error) {
40+
var element *Publish
41+
select {
42+
case element = <-m.ch:
43+
case <-time.After(time.Duration(int64(timeoutMs * 1000000))):
44+
return nil, nil
45+
case <-m.closed:
46+
return nil, fmt.Errorf("channel is closed")
47+
}
48+
49+
m.mu.Lock()
50+
m.shift()
51+
m.mu.Unlock()
52+
return element, nil
53+
}
54+
55+
3856
func (m *MessageReceiver) send(p *Publish) error {
3957
m.mu.Lock()
4058
m.backBuffer = append(m.backBuffer, p)

0 commit comments

Comments
 (0)