Ejemplo n.º 1
0
        /// <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;

        }
Ejemplo n.º 2
0
        /// <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;

        }
Ejemplo n.º 3
0
        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);
            }

        }