diff --git a/broker/broker.go b/broker/broker.go index f798818..cf772c9 100644 --- a/broker/broker.go +++ b/broker/broker.go @@ -407,16 +407,19 @@ func (b *Broker) handleConnection(typ int, conn net.Conn) error{ } } b.clients.Store(cid, c) + + var pubPack = PubPacket{} + if willmsg != nil { + pubPack.TopicName = info.willMsg.TopicName + pubPack.Payload = info.willMsg.Payload + } pubInfo := Info{ ClientID: info.clientID, Username: info.username, Password: info.password, Keepalive: info.keepalive, - WillMsg: &PubPacket{ - TopicName: info.willMsg.TopicName, - Payload: info.willMsg.Payload, - }, + WillMsg: pubPack, } b.OnlineOfflineNotification(pubInfo, true, c.lastMsgTime) diff --git a/broker/client.go b/broker/client.go index 5926466..223efc9 100644 --- a/broker/client.go +++ b/broker/client.go @@ -122,7 +122,7 @@ type Info struct { Username string `json:"username"` Password []byte `json:"password"` Keepalive uint16 `json:"keepalive"` - WillMsg *PubPacket `json:"willMsg"` + WillMsg PubPacket `json:"willMsg"` } type route struct { @@ -859,15 +859,19 @@ func (c *client) Close() { if c.typ == CLIENT { b.BroadcastUnSubscribe(unSubTopics) + + var pubPack = PubPacket{} + if c.info.willMsg != nil { + pubPack.TopicName = c.info.willMsg.TopicName + pubPack.Payload = c.info.willMsg.Payload + } + pubInfo := Info{ ClientID: c.info.clientID, Username: c.info.username, Password: c.info.password, Keepalive: c.info.keepalive, - WillMsg: &PubPacket{ - TopicName: c.info.willMsg.TopicName, - Payload: c.info.willMsg.Payload, - }, + WillMsg: pubPack, } //offline notification b.OnlineOfflineNotification(pubInfo, false, c.lastMsgTime) diff --git a/broker/http.go b/broker/http.go index 5055f10..c99f4ff 100644 --- a/broker/http.go +++ b/broker/http.go @@ -37,6 +37,11 @@ func InitHTTPMoniter(b *Broker) { conns := make([]ConnClient, 0) b.clients.Range(func (k, v interface{}) bool { cl, _ := v.(*client) + var pubPack = PubPacket{} + if cl.info.willMsg != nil { + pubPack.TopicName = cl.info.willMsg.TopicName + pubPack.Payload = cl.info.willMsg.Payload + } msg := ConnClient{ Info: Info{ @@ -44,10 +49,7 @@ func InitHTTPMoniter(b *Broker) { Username: cl.info.username, Password: cl.info.password, Keepalive: cl.info.keepalive, - WillMsg: &PubPacket{ - TopicName: cl.info.willMsg.TopicName, - Payload: cl.info.willMsg.Payload, - }, + WillMsg: pubPack, }, LastMsgTime: cl.lastMsgTime, }