Exemplo n.º 1
0
        public void EnterReadLockTest()
        {
            ReaderWriterLockSlim readerWriterLockSlim = null; // TODO: 初始化为适当的值

            ReaderWriterLockSlimEx.EnterReadLock(readerWriterLockSlim);
            Assert.Inconclusive("无法验证不返回值的方法。");
        }
Exemplo n.º 2
0
        /// <summary>
        ///
        /// </summary>
        internal void Slice()
        {
            bool bIsChange = false;

            // 检查是否已经在处理Slice(...)的调用
            if (ReaderWriterLockSlimEx.QuickTryEnterWriteLock(m_LockInSliceWaitExecute) == false)
            {
                return;
            }
            {
                if (m_InSliceWaitExecute == false)   // 没有锁定
                {
                    bIsChange = m_InSliceWaitExecute = true;
                }
            }
            m_LockInSliceWaitExecute.ExitWriteLock();

            // 已经在处理Slice(...)中
            if (bIsChange == false && m_InSliceWaitExecute)
            {
                return;
            }

            IWaitExecuteInfo[] waitExecuteArray = null;
            do
            {
                waitExecuteArray = null;

                m_LocksWaitExecuteQueue.EnterWriteLock();
                {
                    if (m_WaitExecuteQueue.Count > 0)
                    {
                        waitExecuteArray = m_WaitExecuteQueue.ToArray();
                        m_WaitExecuteQueue.Clear();
                    }
                }
                m_LocksWaitExecuteQueue.ExitWriteLock();

                if (waitExecuteArray == null)
                {
                    break;
                }

                for (int iIndex = 0; iIndex < waitExecuteArray.Length; iIndex++)
                {
                    waitExecuteArray[iIndex].Execute();
                }
            } while (waitExecuteArray != null);  // 可能执行的时间比较长 所以再检测一下是不是还有

            // 已经处理完Slice(...)的调用
            m_LockInSliceWaitExecute.EnterWriteLock();
            {
                m_InSliceWaitExecute = false;
            }
            m_LockInSliceWaitExecute.ExitWriteLock();
        }
Exemplo n.º 3
0
        public void TryEnterReadLockTest()
        {
            ReaderWriterLockSlim readerWriterLockSlim = null; // TODO: 初始化为适当的值
            bool expected = false;                            // TODO: 初始化为适当的值
            bool actual;

            actual = ReaderWriterLockSlimEx.TryEnterReadLock(readerWriterLockSlim);
            Assert.AreEqual(expected, actual);
            Assert.Inconclusive("验证此测试方法的正确性。");
        }
Exemplo n.º 4
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="eventArgs"></param>
        public void DeactivateSpaceNode(object sender, DeactivateSpaceNodeEventArgs eventArgs)
        {
            MapSpaceNode mapSpaceNode = eventArgs.SpaceNode;

            Debug.Assert(mapSpaceNode != null, "PartitionSpaceStrategy.DeactivateSpaceNode(...) - mapSpaceNode == null error!");

            ReaderWriterLockSlimEx.EnterWriteLock(m_LockAllSpaceNodes);
            {
                this.DeactivateSelfSpaceNode(mapSpaceNode);
            }
            ReaderWriterLockSlimEx.ExitWriteLock(m_LockAllSpaceNodes);
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="packet"></param>
        public void AddUpdateData(Packet packet, uint uiUpdateCount)
        {
            ReaderWriterLockSlimEx.EnterWriteLock(m_LockUpdatePacket);
            {
                m_UpdatePacket.Write(packet);

                packet.Release();

                m_UpdateCount += uiUpdateCount;
            }
            ReaderWriterLockSlimEx.ExitWriteLock(m_LockUpdatePacket);
        }
        /// <summary>
        ///
        /// </summary>
        public void SendUpdates()
        {
            ReaderWriterLockSlimEx.EnterWriteLock(m_LockUpdatePacket);
            {
                m_UpdatePacket.EndWrite(m_UpdateCount);

                m_UpdateCount = 0;

                base.NetState.Send(m_UpdatePacket);

                m_UpdatePacket = new UpdatePacket();
            }
            ReaderWriterLockSlimEx.ExitWriteLock(m_LockUpdatePacket);
        }
Exemplo n.º 7
0
        /// <summary>
        ///
        /// </summary>
        private void CheckDeactivateSpaceNode()
        {
            List <MapSpaceNode> mapSpaceNodeList = new List <MapSpaceNode>(LIST_CAPACITY_SIZE);

            ReaderWriterLockSlimEx.EnterWriteLock(m_LockAllSpaceNodes);
            {
                foreach (KeyValuePair <MapSpaceNode, MapSpaceNode> keyValuePair in m_DeactivateSpaceNodes)
                {
                    mapSpaceNodeList.Add(keyValuePair.Key);
                }
            }
            ReaderWriterLockSlimEx.ExitWriteLock(m_LockAllSpaceNodes);

            foreach (MapSpaceNode mapSpaceNode in mapSpaceNodeList)
            {
                this.CheckToDeadSpaceNode(mapSpaceNode);
            }
        }
Exemplo n.º 8
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="mapSpaceNode"></param>
        public void CheckToDeadSpaceNode(MapSpaceNode mapSpaceNode)
        {
            Debug.Assert(mapSpaceNode != null, "PartitionSpaceStrategy.DeactivateSpaceNode(...) - mapSpaceNode == null error!");

            MapSpaceNode parentMapSpaceNode = mapSpaceNode.Parent;

            Debug.Assert(parentMapSpaceNode != null, "PartitionSpaceStrategy.DeactivateSpaceNode(...) - parentMapSpaceNode == null error!");

            ReaderWriterLockSlimEx.EnterWriteLock(m_LockAllSpaceNodes);
            {
                do
                {
                    MapSpaceNode outValue = null;
                    if (m_DeactivateSpaceNodes.TryGetValue(mapSpaceNode, out outValue) == false)
                    {
                        break;
                    }

                    int iGridCellPointX = parentMapSpaceNode.RankIndex.Rank0Index * MAX_NUMBER_OF_CELLS;
                    int iGridCellPointY = parentMapSpaceNode.RankIndex.Rank1Index * MAX_NUMBER_OF_CELLS;

                    MapSpaceNode subSpaceNode1 = this.GetSubSpaceNode(iGridCellPointX + mapSpaceNode.RankIndex.Rank0Index - 1, iGridCellPointY + mapSpaceNode.RankIndex.Rank1Index - 1, mapSpaceNode.Owner);
                    ;
                    if (subSpaceNode1 != null && this.IsDeadOrDeactivate(subSpaceNode1) == false)
                    {
                        break;
                    }

                    MapSpaceNode subSpaceNode2 = this.GetSubSpaceNode(iGridCellPointX + mapSpaceNode.RankIndex.Rank0Index, iGridCellPointY + mapSpaceNode.RankIndex.Rank1Index - 1, mapSpaceNode.Owner);
                    ;
                    if (subSpaceNode2 != null && this.IsDeadOrDeactivate(subSpaceNode2) == false)
                    {
                        break;
                    }

                    MapSpaceNode subSpaceNode3 = this.GetSubSpaceNode(iGridCellPointX + mapSpaceNode.RankIndex.Rank0Index + 1, iGridCellPointY + mapSpaceNode.RankIndex.Rank1Index - 1, mapSpaceNode.Owner);
                    ;
                    if (subSpaceNode3 != null && this.IsDeadOrDeactivate(subSpaceNode3) == false)
                    {
                        break;
                    }

                    MapSpaceNode subSpaceNode4 = this.GetSubSpaceNode(iGridCellPointX + mapSpaceNode.RankIndex.Rank0Index - 1, iGridCellPointY + mapSpaceNode.RankIndex.Rank1Index, mapSpaceNode.Owner);
                    ;
                    if (subSpaceNode4 != null && this.IsDeadOrDeactivate(subSpaceNode4) == false)
                    {
                        break;
                    }

                    // DeactivateSpaceNode5 == SelfSpaceNode

                    MapSpaceNode subSpaceNode6 = this.GetSubSpaceNode(iGridCellPointX + mapSpaceNode.RankIndex.Rank0Index + 1, iGridCellPointY + mapSpaceNode.RankIndex.Rank1Index, mapSpaceNode.Owner);
                    ;
                    if (subSpaceNode6 != null && this.IsDeadOrDeactivate(subSpaceNode6) == false)
                    {
                        break;
                    }

                    MapSpaceNode subSpaceNode7 = this.GetSubSpaceNode(iGridCellPointX + mapSpaceNode.RankIndex.Rank0Index - 1, iGridCellPointY + mapSpaceNode.RankIndex.Rank1Index + 1, mapSpaceNode.Owner);
                    if (subSpaceNode7 != null && this.IsDeadOrDeactivate(subSpaceNode7) == false)
                    {
                        break;
                    }

                    MapSpaceNode subSpaceNode8 = this.GetSubSpaceNode(iGridCellPointX + mapSpaceNode.RankIndex.Rank0Index, iGridCellPointY + mapSpaceNode.RankIndex.Rank1Index + 1, mapSpaceNode.Owner);
                    ;
                    if (subSpaceNode8 != null && this.IsDeadOrDeactivate(subSpaceNode8) == false)
                    {
                        break;
                    }

                    MapSpaceNode subSpaceNode9 = this.GetSubSpaceNode(iGridCellPointX + mapSpaceNode.RankIndex.Rank0Index + 1, iGridCellPointY + mapSpaceNode.RankIndex.Rank1Index + 1, mapSpaceNode.Owner);
                    ;
                    if (subSpaceNode9 != null && this.IsDeadOrDeactivate(subSpaceNode9) == false)
                    {
                        break;
                    }

                    // All DeadOrDeactivate
                    this.DeadSelfSpaceNode(mapSpaceNode);
                } while (false);
            }
            ReaderWriterLockSlimEx.ExitWriteLock(m_LockAllSpaceNodes);
        }
Exemplo n.º 9
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="eventArgs"></param>
        public void ActivateSpaceNode(object sender, ActivateSpaceNodeEventArgs eventArgs)
        {
            MapSpaceNode mapSpaceNode = eventArgs.SpaceNode;

            Debug.Assert(mapSpaceNode != null, "PartitionSpaceStrategy.ActivateSpaceNode(...) - mapSpaceNode == null error!");

            MapSpaceNode parentMapSpaceNode = mapSpaceNode.Parent;

            Debug.Assert(parentMapSpaceNode != null, "PartitionSpaceStrategy.ActivateSpaceNode(...) - parentMapSpaceNode == null error!");

            ReaderWriterLockSlimEx.EnterWriteLock(m_LockAllSpaceNodes);
            {
                // 激活自己
                this.ActivateSelfSpaceNode(mapSpaceNode);

                int iGridCellPointX = parentMapSpaceNode.RankIndex.Rank0Index * MAX_NUMBER_OF_CELLS;
                int iGridCellPointY = parentMapSpaceNode.RankIndex.Rank1Index * MAX_NUMBER_OF_CELLS;

                // ActivateSpaceNode1
                MapSpaceNode subSpaceNode1 = this.GetSubSpaceNode(iGridCellPointX + mapSpaceNode.RankIndex.Rank0Index - 1, iGridCellPointY + mapSpaceNode.RankIndex.Rank1Index - 1, mapSpaceNode.Owner);
                if (subSpaceNode1 != null)
                {
                    this.ActivateNearSpaceNode(subSpaceNode1);
                }

                // ActivateSpaceNode2
                MapSpaceNode subSpaceNode2 = this.GetSubSpaceNode(iGridCellPointX + mapSpaceNode.RankIndex.Rank0Index, iGridCellPointY + mapSpaceNode.RankIndex.Rank1Index - 1, mapSpaceNode.Owner);
                if (subSpaceNode2 != null)
                {
                    this.ActivateNearSpaceNode(subSpaceNode2);
                }

                // ActivateSpaceNode3
                MapSpaceNode subSpaceNode3 = this.GetSubSpaceNode(iGridCellPointX + mapSpaceNode.RankIndex.Rank0Index + 1, iGridCellPointY + mapSpaceNode.RankIndex.Rank1Index - 1, mapSpaceNode.Owner);
                if (subSpaceNode3 != null)
                {
                    this.ActivateNearSpaceNode(subSpaceNode3);
                }

                // ActivateSpaceNode4
                MapSpaceNode subSpaceNode4 = this.GetSubSpaceNode(iGridCellPointX + mapSpaceNode.RankIndex.Rank0Index - 1, iGridCellPointY + mapSpaceNode.RankIndex.Rank1Index, mapSpaceNode.Owner);
                if (subSpaceNode4 != null)
                {
                    this.ActivateNearSpaceNode(subSpaceNode4);
                }

                // ActivateSpaceNode5 == SelfSpaceNode

                // ActivateSpaceNode6
                MapSpaceNode subSpaceNode6 = this.GetSubSpaceNode(iGridCellPointX + mapSpaceNode.RankIndex.Rank0Index + 1, iGridCellPointY + mapSpaceNode.RankIndex.Rank1Index, mapSpaceNode.Owner);
                if (subSpaceNode6 != null)
                {
                    this.ActivateNearSpaceNode(subSpaceNode6);
                }

                // ActivateSpaceNode7
                MapSpaceNode subSpaceNode7 = this.GetSubSpaceNode(iGridCellPointX + mapSpaceNode.RankIndex.Rank0Index - 1, iGridCellPointY + mapSpaceNode.RankIndex.Rank1Index + 1, mapSpaceNode.Owner);
                if (subSpaceNode7 != null)
                {
                    this.ActivateNearSpaceNode(subSpaceNode7);
                }

                // ActivateSpaceNode8
                MapSpaceNode subSpaceNode8 = this.GetSubSpaceNode(iGridCellPointX + mapSpaceNode.RankIndex.Rank0Index, iGridCellPointY + mapSpaceNode.RankIndex.Rank1Index + 1, mapSpaceNode.Owner);
                if (subSpaceNode8 != null)
                {
                    this.ActivateNearSpaceNode(subSpaceNode8);
                }

                // ActivateSpaceNode9
                MapSpaceNode subSpaceNode9 = this.GetSubSpaceNode(iGridCellPointX + mapSpaceNode.RankIndex.Rank0Index + 1, iGridCellPointY + mapSpaceNode.RankIndex.Rank1Index + 1, mapSpaceNode.Owner);
                if (subSpaceNode9 != null)
                {
                    this.ActivateNearSpaceNode(subSpaceNode9);
                }
            }
            ReaderWriterLockSlimEx.ExitWriteLock(m_LockAllSpaceNodes);
        }