@@ -21,6 +21,10 @@ def __init__(self, client_id, server, port=0, user=None, password=None, keepaliv
21
21
self .user = user
22
22
self .pswd = password
23
23
self .keepalive = keepalive
24
+ self .lw_topic = None
25
+ self .lw_msg = None
26
+ self .lw_qos = 0
27
+ self .lw_retain = False
24
28
25
29
def _send_str (self , s ):
26
30
self .sock .write (struct .pack ("!H" , len (s )))
@@ -39,6 +43,14 @@ def _recv_len(self):
39
43
def set_callback (self , f ):
40
44
self .cb = f
41
45
46
+ def set_last_will (self , topic , msg , retain = False , qos = 0 ):
47
+ assert 0 <= qos <= 2
48
+ assert topic
49
+ self .lw_topic = topic
50
+ self .lw_msg = msg
51
+ self .lw_qos = qos
52
+ self .lw_retain = retain
53
+
42
54
def connect (self , clean_session = True ):
43
55
self .sock = socket .socket ()
44
56
self .sock .connect (self .addr )
@@ -55,9 +67,16 @@ def connect(self, clean_session=True):
55
67
assert self .keepalive < 65536
56
68
msg [10 ] |= self .keepalive >> 8
57
69
msg [11 ] |= self .keepalive & 0x00FF
70
+ if self .lw_topic :
71
+ msg [1 ] += 2 + len (self .lw_topic ) + 2 + len (self .lw_msg )
72
+ msg [9 ] |= 0x4 | (self .lw_qos & 0x1 ) << 3 | (self .lw_qos & 0x2 ) << 3
73
+ msg [9 ] |= self .lw_retain << 5
58
74
self .sock .write (msg )
59
75
#print(hex(len(msg)), hexlify(msg, ":"))
60
76
self ._send_str (self .client_id )
77
+ if self .lw_topic :
78
+ self ._send_str (self .lw_topic )
79
+ self ._send_str (self .lw_msg )
61
80
if self .user is not None :
62
81
self ._send_str (self .user )
63
82
self ._send_str (self .pswd )
0 commit comments