diff --git a/conn/conn_mgr.go b/conn/conn_mgr.go index fd85b64..8629a56 100644 --- a/conn/conn_mgr.go +++ b/conn/conn_mgr.go @@ -35,6 +35,19 @@ func (m *Manager) Store(groupName string, s entity.NetworkEntity) error { return group.Add(s) } +func (m *Manager) Remove(groupName string, s entity.NetworkEntity) error { + m.Lock() + delete(m.conns, s.Session().ID()) + m.Unlock() + + group, ok := m.FindGroup(groupName) + if !ok { + return nil + } + + return group.Leave(s) +} + // NewGroup 新增分组,若分组已存在,则返回现有分组 func (m *Manager) NewGroup(name string) *Group { m.Lock() diff --git a/core/connection.go b/core/connection.go index 8007251..d8e7b90 100644 --- a/core/connection.go +++ b/core/connection.go @@ -3,6 +3,7 @@ package core import ( "errors" "fmt" + "git.noahlan.cn/noahlan/nnet/conn" "git.noahlan.cn/noahlan/nnet/entity" "git.noahlan.cn/noahlan/nnet/packet" "git.noahlan.cn/noahlan/nnet/scheduler" @@ -268,6 +269,7 @@ func (r *connection) Close() error { close(r.chDie) scheduler.PushTask(func() { Lifetime.Close(r) }) } + _ = r.ngin.connManager.Remove(conn.DefaultGroupName, r) r.session.Close() return r.conn.Close()