/// <summary> /// 查询是否有空位,并尝试坐下 /// </summary> /// <returns></returns> public bool logicHasIdleChairAndSitDown(int roomId, string strIpPort, out ToSitDownStatus sitDownStatus) { //有空位 if (logicHasIdleChair(roomId)) { IRoomModel room = logicGetRoom(roomId); //本人 if (logicHasUser(strIpPort)) { IUserModel user = logicGetUser(strIpPort); bool isOk = false; // if (room.isWaitReconnection) { if (room.WaitReconnectionUser.Id != user.Id) { sitDownStatus = ToSitDownStatus.WaitReconnectioRoom5; return false; } } // isOk = room.setSitDown(user); if (isOk) { sitDownStatus = ToSitDownStatus.Success0; return true; } sitDownStatus = ToSitDownStatus.ProviderError3; return false; }//end if } else { sitDownStatus = ToSitDownStatus.NoIdleChair1; return false; } sitDownStatus = ToSitDownStatus.ProviderError3; return false; }
/// <summary> /// 针对自动加入优化,找差1人就可以开始的桌子 /// </summary> /// <param name="roomId"></param> /// <param name="strIpPort"></param> /// <param name="sitDownStatus"></param> /// <returns></returns> public bool logicHasIdleChairAndMatchSitDown(int roomId, int matchLvl, string strIpPort, bool chkSameIp, out ToSitDownStatus sitDownStatus) { //有空位 int[] matchRes = logicHasIdleMatchChair(roomId); if (Convert.ToBoolean(matchRes[0]) && matchLvl == matchRes[1]) { IRoomModel room = logicGetRoom(roomId); //本人 if (logicHasUser(strIpPort)) { IUserModel user = logicGetUser(strIpPort); //--------------------------------------------- //test //chkSameIp = false; if (chkSameIp) { if (room.hasSameIpPeople(user,true)) { sitDownStatus = ToSitDownStatus.HasSameIpUserOnChair4; return false; } } //chkWaitReconnection if (room.isWaitReconnection) { if (room.WaitReconnectionUser.Id != user.Id) { sitDownStatus = ToSitDownStatus.WaitReconnectioRoom5; return false; } } //--------------------------------------------- bool isOk = room.setSitDown(user); if (isOk) { sitDownStatus = ToSitDownStatus.Success0; return true; } sitDownStatus = ToSitDownStatus.ProviderError3; return false; }//end if } else { sitDownStatus = ToSitDownStatus.NoIdleChair1; return false; } sitDownStatus = ToSitDownStatus.ProviderError3; return false; }
private void TimedAutoMatchRoom_Sub_Match(ref IRoomModel room, AutoMatchRoomModel amr, IUserModel user, AppSession userSession, ref ToSitDownStatus sitDownStatus, ref bool sitDown, ref int roomId, int matchLvl) { try { foreach (int roomKey in roomList.Keys) { room = (IRoomModel)roomList.get(roomKey); //自动匹配差1人 if (amr.Tab == room.Tab) { roomId = room.Id; //不可为上次的房间,否则会因三人中的二人未退出,又匹配到该房间 if (amr.getRoomOldId() == roomId) { continue; } //不可为正在游戏中的房间 if (room.hasGamePlaying()) { continue; } //不可为断线重连中的房间 if (room.isWaitReconnection) { continue; } //不可为有尸体的房间 if (logicChkRoomByDeadPeople(roomId)) { continue; } //自动匹配原则是 差1人的游戏最佳 //所以这里不能单单只是坐下,要做在差一人的坐位上 sitDown = logicHasIdleChairAndMatchSitDown(roomId, matchLvl, //user.getStrIpPort(), userSession.RemoteEndPoint.ToString(), true, out sitDownStatus); if (sitDown) { TimedAutoMatchRoom_Sub_SitDown_Ok(room, userSession); break; }//end if }//end if }//end for } catch (Exception exd) { Log.WriteStrByException(CLASS_NAME, "TimedAutoMatchRoom_Sub_Match", exd.Message, exd.Source, exd.StackTrace); } }