Exemplo n.º 1
0
 /// <summary>
 /// Enqueues a new task in the queue that will be executed during the next
 /// tick.
 /// </summary>
 public void EnqueueTask(IMessage task)
 {
     if (task == null)
     {
         throw new ArgumentNullException(nameof(task), "task cannot be null");
     }
     TaskQueue.Enqueue(task);
 }
Exemplo n.º 2
0
        /// <summary>
        /// Requeues a segment into the buffer pool.
        /// 重新加入到缓冲池。
        /// </summary>
        /// <param name="segment">the segment to requeue</param>
        public void CheckIn(BufferSegment segment)
        {
            if (segment.m_uses > 1)
            {
                Logs.Error(string.Format("Checked in segment (Size: {0}, Number: {1}) that is already in use! Queue contains: {2}, Buffer amount: {3}",
                                         segment.Length, segment.Number, _availableSegments.Count, _buffers.Count));
            }

            _availableSegments.Enqueue(segment);
        }
Exemplo n.º 3
0
 public void AddMessage(IMessage msg)
 {
     //var handler = ContextHandler;
     //if (m_map != null)
     //{
     //    handler.AddMessage(msg);
     //}
     //else
     //{
     //    log.Warn("Trying to add message for action \"{0}\"when no ContextHandler is set: " + this, msg);
     //    msg.Execute();
     //}
     m_messageQueue.Enqueue(msg);
 }
Exemplo n.º 4
0
        /// <summary>
        /// Adds a client to the queue.
        /// </summary>
        /// <param name="client">the client to add to the queue</param>
        public static void EnqueueClient(IRealmClient client)
        {
            client.Account.IsEnqueued = true;
            s_queuedClients.Enqueue(client);

            LoginHandler.SendAuthQueueStatus(client);
        }
Exemplo n.º 5
0
 /// <summary>
 /// Requeues a segment into the buffer pool.
 /// </summary>
 /// <param name="segment">the segment to requeue</param>
 public void CheckIn(BufferSegment segment)
 {
     /* log.Info("CheckIn");
      *           if (segment.m_uses > 1)
      *           {
      *                   log.Error("Checked in segment (Size: {0}, Number: {1}) that is already in use! Queue contains: {2}, Buffer amount: {3}",
      *                           segment.Length, segment.Number, _availableSegments.Count, _buffers.Count);
      *           }
      * if (segment.m_uses < 0)
      * {
      *   log.Error("Checked in segment (Size: {0}, Number: {1}) that is ={4} Queue contains: {2}, Buffer amount: {3}",
      *       segment.Length, segment.Number, _availableSegments.Count, _buffers.Count,segment.m_uses);
      * }
      *       segment.m_uses = 0;*/
     _availableSegments.Enqueue(segment);
 }
Exemplo n.º 6
0
        public void TestEnqueueAndDequeue()
        {
            LockfreeQueue<int> q = new LockfreeQueue<int>();

            q.Enqueue(1);
            q.Enqueue(2);
            q.Enqueue(3);

            // queue count
            Assert.AreEqual(3, q.Count);

            int value;

            Assert.AreEqual(1, q.Dequeue());
            Assert.AreEqual(2, q.Dequeue());
            Assert.AreEqual(3, q.Dequeue());
            Assert.IsFalse(q.TryDequeue(out value));
        }
Exemplo n.º 7
0
        public void TestEnqueueAndDequeue()
        {
            LockfreeQueue <int> q = new LockfreeQueue <int>();

            q.Enqueue(1);
            q.Enqueue(2);
            q.Enqueue(3);

            // queue count
            Assert.AreEqual(3, q.Count);

            int value;

            Assert.AreEqual(1, q.Dequeue());
            Assert.AreEqual(2, q.Dequeue());
            Assert.AreEqual(3, q.Dequeue());
            Assert.IsFalse(q.TryDequeue(out value));
        }
Exemplo n.º 8
0
        //
        // You can use the following additional attributes as you write your tests:
        //
        // Use ClassInitialize to run code before running the first test in the class
        // [ClassInitialize()]
        // public static void MyClassInitialize(TestContext testContext) { }
        //
        // Use ClassCleanup to run code after all tests in a class have run
        // [ClassCleanup()]
        // public static void MyClassCleanup() { }
        //
        // Use TestInitialize to run code before running each test
        // [TestInitialize()]
        // public void MyTestInitialize() { }
        //
        // Use TestCleanup to run code after each test has run
        // [TestCleanup()]
        // public void MyTestCleanup() { }
        //
        #endregion

        //[TestMethod]
        public void TestAll()
        {
            var num = 5000;

            bool done = false;
            var  q    = new LockfreeQueue <int>();

            for (int i = 0; i < num; i++)
            {
                q.Enqueue(i);
            }

            Assert.AreEqual(num, q.Count);

            var values = new int[num];

            for (int i = 0; i < num; i++)
            {
                ThreadPool.QueueUserWorkItem((indexObj) => {
                    var index = (int)indexObj;
                    var x     = q.TryDequeue();

                    lock (values)
                    {
                        if (index == num - 1)
                        {
                            done = true;
                            Monitor.PulseAll(values);
                        }
                    }
                }, i);
            }

            lock (values)
            {
                if (!done)
                {
                    Monitor.Wait(values);
                }
            }

            var uniqueStrings = new HashSet <int>();

            for (int i = 0; i < values.Length; i++)
            {
                var s = values[i];

                Assert.IsNotNull(s);
                uniqueStrings.Add(s);
            }
            Assert.AreEqual(values.Length, uniqueStrings.Count);
        }
Exemplo n.º 9
0
		//
		// You can use the following additional attributes as you write your tests:
		//
		// Use ClassInitialize to run code before running the first test in the class
		// [ClassInitialize()]
		// public static void MyClassInitialize(TestContext testContext) { }
		//
		// Use ClassCleanup to run code after all tests in a class have run
		// [ClassCleanup()]
		// public static void MyClassCleanup() { }
		//
		// Use TestInitialize to run code before running each test 
		// [TestInitialize()]
		// public void MyTestInitialize() { }
		//
		// Use TestCleanup to run code after each test has run
		// [TestCleanup()]
		// public void MyTestCleanup() { }
		//
		#endregion

		//[TestMethod]
		public void TestAll()
		{
			var num = 5000;

			bool done = false;
			var q = new LockfreeQueue<int>();
		    for (int i = 0; i < num; i++)
			{
				q.Enqueue(i);
			}

			Assert.AreEqual(num, q.Count);

			var values = new int[num];
			for (int i = 0; i < num; i++)
			{
				ThreadPool.QueueUserWorkItem((indexObj) => {
					var index = (int)indexObj;
					var x = q.TryDequeue();

					lock (values)
					{
						if (index == num - 1)
						{
							done = true;
							Monitor.PulseAll(values);
						}
					}
				}, i);
			}

			lock (values)
			{
				if (!done)
				{
					Monitor.Wait(values);
				}
			}

			var uniqueStrings = new HashSet<int>();
			for (int i = 0; i < values.Length; i++)
			{
				var s = values[i];

				Assert.IsNotNull(s);
				uniqueStrings.Add(s);
			}
			Assert.AreEqual(values.Length, uniqueStrings.Count);
		}
Exemplo n.º 10
0
 /// <summary>
 /// Registers the given Updatable during the next Map Tick
 /// </summary>
 public void RegisterUpdatableLater(IUpdatable updatable)
 {
     m_messageQueue.Enqueue(new Message(() => RegisterUpdatable(updatable)));
 }
Exemplo n.º 11
0
 /// <summary>
 /// Will be executed by the current map we are currently in or enqueued and executed,
 /// once we re-enter a map
 /// </summary>
 public void AddPostUpdateMessage(Action action)
 {
     m_environmentQueue.Enqueue(action);
 }
Exemplo n.º 12
0
 /// <summary>Requeues a segment into the buffer pool.</summary>
 /// <param name="segment">the segment to requeue</param>
 public void CheckIn(BufferSegment segment)
 {
     _availableSegments.Enqueue(segment);
 }