예제 #1
0
		public void ShouldEnqueueAndDequeue ()
		{
			ConcurrentLinkedQueue<int> pool = new ConcurrentLinkedQueue<int>();
			
			pool.Enqueue (1);
			
			Assert.AreEqual (1, pool.Dequeue ());			
		}
예제 #2
0
        public void ShouldEnqueueAndDequeue()
        {
            ConcurrentLinkedQueue <int> pool = new ConcurrentLinkedQueue <int>();

            pool.Enqueue(1);

            Assert.AreEqual(1, pool.Dequeue());
        }
예제 #3
0
 public static void RecycleReceiver(IReceiver r)
 {
     if (null == r)
     {
         Debug.LogErrorFormat("On recycle receiver is null !!! ");
         return;
     }
     r.Clear();
     receiverPool.Enqueue(r);
 }
예제 #4
0
 public static void RecycleMessage(IBaseMessage r)
 {
     if (null == r)
     {
         Debug.LogErrorFormat("On recycle IBaseMessage is null !!! ");
         return;
     }
     r.Clear();
     msgPool.Enqueue(r);
 }
예제 #5
0
        /// <summary>
        /// Queues the given buffer to the send queue and notifies it.
        /// </summary>
        /// <param name="buffer"></param>
        private void EnqueueToSendQueueAndNotify(ChunkedBuffer buffer, Promise <ISockNetChannel> promise)
        {
            sendQueue.Enqueue(new SendQueueState()
            {
                buffer  = buffer,
                promise = promise
            });

            NotifySendQueue();
        }
예제 #6
0
		public void ShouldEnqueueAndDequeueMultiple ()
		{
			ConcurrentLinkedQueue<int> pool = new ConcurrentLinkedQueue<int>();
			
			for (int i = 1; i <= 10; i++) {
				pool.Enqueue (i);
			}
			
			for (int i = 1; i <= 10; i++) {
				Assert.AreEqual (i, pool.Dequeue ());
			}
		}
예제 #7
0
        public void ShouldEnqueueAndDequeueMultiple()
        {
            ConcurrentLinkedQueue <int> pool = new ConcurrentLinkedQueue <int>();

            for (int i = 1; i <= 10; i++)
            {
                pool.Enqueue(i);
            }

            for (int i = 1; i <= 10; i++)
            {
                Assert.AreEqual(i, pool.Dequeue());
            }
        }
예제 #8
0
        /// <summary>
        /// 解析
        /// </summary>
        public void Parser(short id, byte[] packetBuff)
        {
            IMessage packet = ProtobufDescriptor.ParserFrom(id, packetBuff);

            if (packet != null)
            {
                PacketTuple <IMessage> tuple = new PacketTuple <IMessage>();
                tuple.SetPacket(id, packet);
                _messages.Enqueue(tuple);
            }
            else
            {
                UnityEngine.Debug.LogError("解析不了 协议号ID :" + id);
            }
        }
예제 #9
0
    /// <summary>
    /// 子线程 处理消息
    /// </summary>
    private void RunAsync()
    {
        //消息处理 接收数据解析数据
        foreach (var net in nets)
        {
            net.Value.UpdateState();

            //将错误信息 推到主线程
            if (net.Value is TcpChnl)
            {
                var tcpChnl = (TcpChnl)net.Value;
                errors.Enqueue((int)tcpChnl.throwQueue.Dequeue());
            }
        }
    }
예제 #10
0
        public override object GetAttribute(string name, object value)
        {
            if (name == null)
            {
                return(null);
            }

            object result = base.GetAttribute(name, value);

            if (result == null)
            {
                // No previous value
                _modified = true;
                _ownerMessage.AddEvent(SharedObjectEventType.CLIENT_UPDATE_DATA, name, value);
                _syncEvents.Enqueue(new SharedObjectEvent(SharedObjectEventType.CLIENT_UPDATE_DATA, name, value));
                NotifyModified();
                _changeStats.Increment();
                result = value;
            }
            return(result);
        }
예제 #11
0
        /// <summary>
        /// Returns an object to the pool.
        /// </summary>
        /// <param name="pooledObject"></param>
        public void Return(PooledObject <T> pooledObject)
        {
            if (pooledObject == null)
            {
                throw new ArgumentNullException("PooledObject cannot be null.");
            }

            if (pooledObject.Pool != this)
            {
                throw new ArgumentException("PooledObject does not belong to this pool.");
            }

            if (Interlocked.CompareExchange(ref pooledObject._state, (byte)PooledObjectState.NONE, (byte)PooledObjectState.USED) == (byte)PooledObjectState.USED)
            {
                int currentPercentile = (int)(((float)(availableObjects + 1) / (float)totalPoolSize) * 100f);

                if (onDestroyObject != null)
                {
                    pooledObject.Value = onDestroyObject(pooledObject.Value);
                }

                if (currentPercentile > trimPercentile || totalPoolSize <= minimumPoolSize)
                {
                    pooledObject._state = (int)PooledObjectState.POOLED;
                    pool.Enqueue(pooledObject);

                    Interlocked.Increment(ref availableObjects);
                }
                else
                {
                    pooledObject.Dispose();
                }
            }
            else
            {
                throw new ArgumentException("PooledObject is already pooled. State: " + pooledObject.State);
            }
        }
예제 #12
0
 /// <summary>
 /// Add a shared object event.
 /// </summary>
 /// <param name="type">Event type.</param>
 /// <param name="key">Handler key.</param>
 /// <param name="value">Event value.</param>
 public void AddEvent(SharedObjectEventType type, string key, object value)
 {
     _events.Enqueue(new SharedObjectEvent(type, key, value));
 }
예제 #13
0
 public void ReturnContext(MessagingContext context)
 {
     pool.Enqueue(context);
 }
예제 #14
0
파일: MsgProcess.cs 프로젝트: junfff/mygame
 public void EnqueueSenderMsg(IBaseMessage msg)
 {
     senderQueue.Enqueue(msg);
 }
예제 #15
0
파일: MsgProcess.cs 프로젝트: junfff/mygame
 public void EnqueueReceiver(IReceiver item)
 {
     receiverQueue.Enqueue(item);
 }
예제 #16
0
파일: MsgProcess.cs 프로젝트: junfff/mygame
 public void EnqueueSocketConnectState(SocketConnectState item)
 {
     socketStateQueue.Enqueue(item);
 }