Esempio n. 1
0
        public bool AddPlayer(GamePlayer player)
        {
            int index = -1;

            //_locker.AcquireWriterLock(Timeout.Infinite);
            //try
            //{
            lock (Data._syncStop)
            {
                if (_count == _userList.Length || player.IsInGame)
                {
                    return(false);
                }

                for (byte i = 0; i < _userList.Length; i++)
                {
                    if (_userList[i] == null && _openState[i])
                    {
                        _count++;
                        _userList[i]            = player;
                        player.CurrentGame      = this;
                        player.CurrentGameIndex = i;
                        index = i;
                        break;
                    }
                }
            }

            if (index != -1)
            {
                OperateGameClass();
                //SendRoomType();
                player.Out.SendTCP(player.Out.SendRoomInfo(_player, this));
                SendRoomInfo();
                _processor.OnAddedPlayer(this, player);
                return(true);
            }
            else
            {
                log.Error(string.Format("EnterGame failed: count {0},list: {1}", _count, _userList));
                return(false);
            }

            //}
            //finally
            //{
            //    _locker.ReleaseWriterLock();
            //}
        }