示例#1
0
        /// <summary>
        /// 出队操作
        /// </summary>
        /// <param name="queueNum">队列号</param>
        /// <returns>返回队首元素</returns>
        static byte[] PopFromQueue(QueueNum queueNum)
        {
            switch (queueNum)
            {
            case QueueNum.PipeToTcp:
                lock (pipeToTcpBufferLocker)
                {
                    if (pipeToTcpBuffer.Count < 1)
                    {
                        return(null);                               // 空队列
                    }
                    return(pipeToTcpBuffer.Dequeue());
                }

            case QueueNum.TcpToPipe:
                lock (tcpToPipeBufferLocker)
                {
                    if (tcpToPipeBuffer.Count < 1)
                    {
                        return(null);                               // 空队列
                    }
                    return(tcpToPipeBuffer.Dequeue());
                }

            default:
                Logger.HistoryPrinting(Logger.Level.INFO, MethodBase.GetCurrentMethod().DeclaringType.FullName, "No such queue exists, number: " + ((byte)queueNum).ToString() + ".");
                return(null);
            }
        }
示例#2
0
        /// <summary>
        /// 入队操作
        /// </summary>
        /// <param name="pushData">入队数据</param>
        /// <param name="queueNum">队列号</param>
        /// <param name="enforcedPush">强制入队</param>
        static void PushToQueue(byte[] pushData, QueueNum queueNum, bool enforcedPush = false)
        {
            switch (queueNum)
            {
            case QueueNum.PipeToTcp:
                if (!ifTCPTransferEstablished && !enforcedPush)
                {
                    return;                                                 // 传输不被允许,而且也不强制入队
                }
                lock (pipeToTcpBufferLocker)
                {
                    if (pipeToTcpBuffer.Count < maxBufferSize)
                    {
                        pipeToTcpBuffer.Enqueue(pushData);
                    }
                    else
                    {
                        Logger.HistoryPrinting(Logger.Level.WARN, MethodBase.GetCurrentMethod().DeclaringType.FullName, "PipeToTcpBuffer queue is full.");
                    }
                }
                break;

            case QueueNum.TcpToPipe:
                if (!ifPipeTransferEstablished && !enforcedPush)
                {
                    return;                                                  // 传输不被允许,而且也不强制入队
                }
                lock (tcpToPipeBufferLocker)
                {
                    if (tcpToPipeBuffer.Count < maxBufferSize)
                    {
                        tcpToPipeBuffer.Enqueue(pushData);
                    }
                    else
                    {
                        Logger.HistoryPrinting(Logger.Level.WARN, MethodBase.GetCurrentMethod().DeclaringType.FullName, "TcpToPipeBuffer queue is full.");
                    }
                }
                break;

            default:
                Logger.HistoryPrinting(Logger.Level.INFO, MethodBase.GetCurrentMethod().DeclaringType.FullName, "No such queue exists, number: " + ((byte)queueNum).ToString() + ".");
                break;
            }
        }