diff --git a/mqtt/hook.go b/mqtt/hook.go index 7cf9a48..f404549 100644 --- a/mqtt/hook.go +++ b/mqtt/hook.go @@ -67,6 +67,7 @@ func (h *MqttServerHook) OnDisconnect(cl *mqttServerV2.Client, err error, expire session := GetSession(cl.ID) MqttClientDisconnect(session) + DelSession(session.ClientId) } @@ -106,7 +107,12 @@ func (h *MqttServerHook) OnPublished(cl *mqttServerV2.Client, pk packets.Packet) // OnConnectAuthenticate returns true/allowed for all requests. func (h *MqttServerHook) OnConnectAuthenticate(cl *mqttServerV2.Client, pk packets.Packet) bool { h.Log.Info("Auth", pk.Connect.Username, pk.Connect.Password) - session := CreateSession(cl.ID, pk.Connect.Username, pk.Connect.Password) + session := GetSession(cl.ID) + if session != nil { + MqttClientDisconnect(session) + DelSession(session.ClientId) + } + session = CreateSession(cl.ID, pk.Connect.Username, pk.Connect.Password) err := MqttClientConnect(session) if err != nil { return false diff --git a/mqtt/session.go b/mqtt/session.go index b97828e..51e7c6b 100644 --- a/mqtt/session.go +++ b/mqtt/session.go @@ -23,3 +23,7 @@ func CreateSession(mqttId string, user, passwd []byte) *Session { func GetSession(mqttId string) *Session { return Sessions[mqttId] } + +func DelSession(mqttId string) { + delete(Sessions, mqttId) +}