private void enter(UserToken token)
        {
            token.instanceID = 0;
            int userId = getUserId(token);

            Console.WriteLine("用户开始匹配" + userId);
            //判断玩家当前是否正在匹配队列中
            if (!userRoom.ContainsKey(userId))
            {
                MatchRoom room    = null;
                bool      isenter = false;
                //当前是否有等待中的房间
                if (roomMap.Count > 0)
                {
                    //遍历当前所有等待中的房间
                    foreach (MatchRoom item in roomMap.Values)
                    {
                        //如果没满员
                        if (item.teamMax > item.team.Count)
                        {
                            room = item;
                            room.team.Add(userId);
                            //添加玩家与房间的映射关系
                            isenter = true;
                            userRoom.TryAdd(userId, room.id);
                            break;
                        }
                    }
                    if (!isenter)
                    {
                        //走到这里 说明等待中的房间全部满员了
                        if (cache.Count > 0)
                        {
                            cache.TryPop(out room);
                            room.team.Add(userId);
                            roomMap.TryAdd(room.id, room);
                            userRoom.TryAdd(userId, room.id);
                        }
                        else
                        {
                            room    = new MatchRoom();
                            room.id = index.GetAndAdd();
                            room.team.Add(userId);
                            roomMap.TryAdd(room.id, room);
                            userRoom.TryAdd(userId, room.id);
                        }
                    }
                }
                else
                {
                    //没有等待中的房间
                    //直接从缓存列表中找出可用房间 或者创建新房间
                    if (cache.Count > 0)
                    {
                        cache.TryPop(out room);
                        room.team.Add(userId);
                        roomMap.TryAdd(room.id, room);
                        userRoom.TryAdd(userId, room.id);
                    }
                    else
                    {
                        room    = new MatchRoom();
                        room.id = index.GetAndAdd();
                        room.team.Add(userId);
                        roomMap.TryAdd(room.id, room);
                        userRoom.TryAdd(userId, room.id);
                    }
                }
                //不管什么方式进入房间 ,判断房间是否满员,满了就开始选人并将当前房间丢进缓存队列
                if (room.team.Count == room.teamMax)
                {
                    // 这里通知选人模块 开始选人了
                    EventUtil.createSelect(room.team);
                    writeToUsers(room.team.ToArray(), GetType(), 0, MatchProtocol.ENTER_SELECT_BRO, null);
                    //移除玩家与房间映射
                    foreach (int item in room.team)
                    {
                        int i;
                        userRoom.TryRemove(item, out i);
                    }
                    //重置房间数据 供下次使用
                    room.team.Clear();
                    //将房间从等待房间表中移除
                    roomMap.TryRemove(room.id, out room);
                    //将房间丢进缓存表 供下次使用
                    cache.Push(room);
                }
            }
        }