コード例 #1
0
        public PResult HandleBattleCreated(string userId)
        {
            StepLocker stepLocker = this.GetFromUserId(userId);

            if (stepLocker == null)
            {
                return(PResult.STEPLOCKER_NOT_FOUND);
            }

            ++stepLocker.createdCount;
            if (stepLocker.createdCount == stepLocker.userCount)
            {
                ThreadPool.QueueUserWorkItem(state =>
                {
                    stepLocker.Start();
                    while (!stepLocker.finished)
                    {
                        stepLocker.Update();
                        Thread.Sleep(5);
                    }
                });
                Logger.Log($"创建战场:{stepLocker.id}");
                return(PResult.SUCCESS);
            }
            return(PResult.WAIT_FOR_USER_BATTLE_CREATED);
        }
コード例 #2
0
        public PResult HandleAction(string userId, _DTO_frame_info dto)
        {
            StepLocker stepLocker = this.GetFromUserId(userId);

            if (stepLocker == null)
            {
                return(PResult.STEPLOCKER_NOT_FOUND);
            }

            stepLocker.HandleAction(dto);

            return(PResult.SUCCESS);
        }
コード例 #3
0
        public PResult HandleEndBattle(string userId)
        {
            StepLocker stepLocker = this.GetFromUserId(userId);

            if (stepLocker == null)
            {
                return(PResult.STEPLOCKER_NOT_FOUND);
            }

            ++stepLocker.endedCount;
            if (stepLocker.endedCount >= stepLocker.userCount)
            {
                stepLocker.finished = true;
                Logger.Log($"战斗结束:{stepLocker.id}");
                return(PResult.SUCCESS);
            }
            return(PResult.WAIT_FOR_USER_ENDED);
        }
コード例 #4
0
        public PResult Leave(string userId)
        {
            if (!this.UserInBattle(userId))
            {
                return(PResult.USER_NOT_INT_BATTLE);
            }

            StepLocker stepLocker = this.GetFromUserId(userId);

            this._uidToLocker.TryRemove(userId, out _);
            int userCount = stepLocker.RemoveUser(userId);

            if (userCount == 0)
            {
                stepLocker.finished = true;
                Logger.Log($"战场结束:{stepLocker.id}");
            }
            return(PResult.SUCCESS);
        }
コード例 #5
0
        private void HandleBattleCreated(IUserToken token)
        {
            User user = this._userBiz.GetUser(token);

            if (user == null)
            {
                return;
            }

            if (!this._battleBiz.UserInBattle(user.id))
            {
                return;
            }

            PResult result = this._battleBiz.HandleBattleCreated(user.id);

            if (result == PResult.SUCCESS)
            {
                StepLocker stepLocker = this._battleBiz.GetFromUserId(user.id);
                stepLocker.Brocast(ProtocolManager.PACKET_BATTLE_ACMD_BATTLE_START());
            }
        }
コード例 #6
0
        private void HandleEndBattle(IUserToken token, _DTO_byte dto)
        {
            User user = this._userBiz.GetUser(token);

            if (user == null)
            {
                return;
            }

            if (!this._battleBiz.UserInBattle(user.id))
            {
                return;
            }

            PResult result = this._battleBiz.HandleEndBattle(user.id);

            if (result == PResult.SUCCESS)
            {
                StepLocker stepLocker = this._battleBiz.GetFromUserId(user.id);
                stepLocker.Brocast(ProtocolManager.PACKET_BATTLE_ACMD_BATTLE_END(dto.value));                    //todo 信任任何一个客户端带来的胜利消息
            }
        }
コード例 #7
0
        public PResult Create(Room room)
        {
            string rid  = Utils.MakeRidFromID(room.map);
            int    seed = this._rnd.Next();

            StepLocker stepLocker = new StepLocker(rid);

            int count = room.teamOne.Count;

            for (int i = 0; i < count; i++)
            {
                string userId = room.teamOne[i].id;
                this._uidToLocker[userId] = stepLocker;
                stepLocker.AddUser(userId);
            }

            count = room.teamTwo.Count;
            for (int i = 0; i < count; i++)
            {
                string userId = room.teamTwo[i].id;
                this._uidToLocker[userId] = stepLocker;
                stepLocker.AddUser(userId);
            }

            this._idToLocker[stepLocker.id] = stepLocker;
            _DTO_player_info[] players = DTOHelper.GetPlayerInfoInRoom(room);

            stepLocker.ForeachUser(userId =>
            {
                IUserToken token = BizFactory.USER_BIZ.GetToken(userId);
                token.CALL_BATTLE_ACMD_ENTER_BATTLE(
                    StepLocker.FRAME_RATE, StepLocker.FRAMES_PER_KEYFRAME, rid,
                    players, seed, userId);
            });

            return(PResult.SUCCESS);
        }