Example #1
0
        public void Run(int WaitSec = GameConfig.Turn_Wait_Server)
        {
            Task SubTask = new Task(() =>
            {
                SpinWait.SpinUntil(() =>
                {
                    return(false);
                }, WaitSec * 1000);

                //【有Bug 风险,用户突然离线】
                var betSession = _GameServer.GetSessions(s => s.GameAttr.UserOpenId == _waitUserOpenId).FirstOrDefault();
                GameManager gm = betSession.GameManager;

                var gi = gm.GetGameBasic();
                //时间到了 还是此用户下注,说明超时,则弃牌
                if (gi.CurBetUserOpenId == gm.UserOpenId)
                {
                    var list = new List <IGameMessage>();

                    //系统主动弃牌
                    gm.PlayerGiveUp();
                    var giveUpMsg = GameMessageHandle.CreateResultPlayerGiveUpMsg(gm.RoomCode,
                                                                                  gm.UserOpenId,
                                                                                  gi.CurBetUserOpenId);
                    list.Add(giveUpMsg);

                    gi = gm.PreNextStep(true);

                    var msg = gm.WaitNextPlayer(gi);
                    if (msg != null)
                    {
                        list.Add(msg);
                    }
                    _GameMessageHandle.Push(list);
                    _GameMessageHandle.Run(_GameServer);
                }
            });

            SubTask.Start();
        }
Example #2
0
        public override List <IGameMessage> HandleData(GameUserSession session, dataPlayerGiveUp Data)
        {
            List <IGameMessage> msgList = new List <IGameMessage>();
            GameManager         gm      = session.GameManager;

            gm.PlayerGiveUp();

            var gi        = gm.PreNextStep(true);
            var dealCards = gm.DealCard(gi);

            if (dealCards != null)
            {
                ResultPlayerGiveUp giveUpMsg = GameMessageHandle.CreateResultPlayerGiveUpMsg(gm.RoomCode, Data.OpenId, "");
                msgList.Add(giveUpMsg);

                gi = gm.PreNextStep(true);
                var cardsMsg = GameMessageHandle.CreateDealCardMsg(gm.RoomCode, dealCards, gi);
                msgList.Add(cardsMsg);

                GameTaskManager.SyncTask_DealCardDone(session, gi);
            }
            else
            {
                var msg = gm.WaitNextPlayer(gi);
                if (msg != null)
                {
                    msgList.Add(msg);
                }
                else
                {
                    ResultPlayerGiveUp giveUpMsg = GameMessageHandle.CreateResultPlayerGiveUpMsg(gm.RoomCode, Data.OpenId, gi.CurBetUserOpenId);
                    msgList.Add(giveUpMsg);
                }
            }

            return(msgList);
        }