diff --git a/app/firenze/cmd/firenze b/app/firenze/cmd/firenze deleted file mode 100755 index 606dbb89..00000000 Binary files a/app/firenze/cmd/firenze and /dev/null differ diff --git a/library/melody/hub.go b/library/melody/hub.go index 293b095a..e017e7c5 100644 --- a/library/melody/hub.go +++ b/library/melody/hub.go @@ -108,6 +108,10 @@ func (h *hub) len() int { } func (h *hub) all() []*Session { + if h == nil { + return nil + } + h.rwmutex.RLock() defer h.rwmutex.RUnlock() @@ -118,7 +122,29 @@ func (h *hub) all() []*Session { return s } +func (h *hub) GetDidSession(did string) *Session { + if h == nil { + return nil + } + if len(did) <= 0 { + return nil + } + + h.rwmutex.RLock() + s := h.didSessionMap[did] + h.rwmutex.RUnlock() + + return s +} + func (h *hub) updateSession(s *Session) { + if h == nil { + return + } + if s == nil { + return + } + if len(s.Sid) > 0 { h.rwmutex.Lock() h.sidSessionMap[s.Sid] = s diff --git a/library/melody/melody.go b/library/melody/melody.go index d0adb5d2..a5fa0be0 100644 --- a/library/melody/melody.go +++ b/library/melody/melody.go @@ -202,6 +202,13 @@ func (m *Melody) HandleRequestWithKeys(w http.ResponseWriter, r *http.Request, k baseReq.Did = baseReq.Channel } + // 检查设备 + oldSession := m.hub.GetDidSession(baseReq.Did) + if oldSession != nil { + logger.Warn("device reconnect: %d - %s", baseReq.Mid, baseReq.Did) + oldSession.close() + } + // 升级协议 conn, err := m.Upgrader.Upgrade(w, r, w.Header()) if err != nil {