diff --git a/broker.go b/broker.go index 1ba7632..4bd6c97 100644 --- a/broker.go +++ b/broker.go @@ -147,7 +147,8 @@ func (br *broker) run() { time.AfterFunc(time.Second*3, func() { if atomic.LoadUint32(&s.confirmed) == 0 { - c.Close() + log.Error().Msgf("Session '%s' confirm timeout", sid) + c.CloseConn() } }) diff --git a/client/client.go b/client/client.go index 4809ce4..abde620 100644 --- a/client/client.go +++ b/client/client.go @@ -12,5 +12,7 @@ type Client interface { Close() + CloseConn() + Closed() bool } diff --git a/device.go b/device.go index edea542..40e1c9a 100644 --- a/device.go +++ b/device.go @@ -135,6 +135,10 @@ func (dev *device) Closed() bool { return atomic.LoadUint32(&dev.closed) == 1 } +func (dev *device) CloseConn() { + dev.conn.Close() +} + func (dev *device) Close() { if dev.Closed() { return @@ -144,7 +148,7 @@ func (dev *device) Close() { log.Debug().Msgf("Device '%s' disconnected", dev.conn.RemoteAddr()) - dev.conn.Close() + dev.CloseConn() close(dev.send) } diff --git a/user.go b/user.go index d7ff913..f1e3501 100644 --- a/user.go +++ b/user.go @@ -59,6 +59,10 @@ func (u *user) Closed() bool { return atomic.LoadUint32(&u.closed) == 1 } +func (u *user) CloseConn() { + u.conn.Close() +} + func (u *user) Close() { if u.Closed() { return @@ -66,7 +70,8 @@ func (u *user) Close() { atomic.StoreUint32(&u.closed, 1) - u.conn.Close() + u.CloseConn() + close(u.send) }