Ejemplo n.º 1
0
        /// <summary>
        /// 队列数据 读文件
        /// </summary>
        /// <param name="node">消息队列节点</param>
        /// <param name="config">队列数据 读取配置</param>
        /// <param name="readerIndex">读文件编号</param>
        internal QueueReader(QueueNode node, Config.QueueReader config, int readerIndex)
        {
            Writer      = node.Writer;
            Node        = node;
            this.config = config ?? defaultConfig;
            this.config.Format();
            this.readerIndex = readerIndex;
            int isReader = 0;

            ++Writer.ReadCount;
            writerAppendIdentity = Writer.StatePacketIndex.Identity;
            try
            {
                if (checkStateFile())
                {
                    stateFileStream = new FileStream(stateFileName, FileMode.Open, FileAccess.ReadWrite, FileShare.Read, 256, FileOptions.None);
                    stateFileStream.Seek(-stateBufferSize, SeekOrigin.End);
                    stateFileStream.Read(bigBuffer, 0, stateBufferSize);

                    fixed(byte *stateDataFixed = bigBuffer) Identity = *(ulong *)stateDataFixed;
                }
                else
                {
                    stateFileStream = new FileStream(stateFileName, FileMode.CreateNew, FileAccess.Write, FileShare.Read, 256, FileOptions.None);
                }
                long fileIndex = 0;
                if (Writer.GetIndex(Identity, ref dataFileIdentity, ref fileIndex))
                {
                    writeIdentity     = Identity;
                    memoryEndIdentity = Identity + config.MemoryCacheNodeCount;
                    messages          = new MessageItem[(int)config.MemoryCacheNodeCount + QueueWriter.MaxPacketCount + 1];
                    if (Identity == writerAppendIdentity || loadFile(fileIndex))
                    {
                        isReader = 1;
                    }
                }
            }
            finally
            {
                if (isReader == 0)
                {
                    Dispose();
                }
            }
        }
Ejemplo n.º 2
0
 /// <summary>
 /// 添加数据任务
 /// </summary>
 /// <param name="messageQueue">消息队列节点</param>
 /// <param name="config">队列数据 读取配置</param>
 /// <param name="parser"></param>
 /// <param name="readerIndex">队列数据 读文件索引</param>
 internal GetIdentity(MessageQueue.Node messageQueue, Config.QueueReader config, ref OperationParameter.NodeParser parser, int readerIndex) : this(messageQueue, config, ref parser)
 {
     ReaderIndex = readerIndex;
 }
Ejemplo n.º 3
0
 /// <summary>
 /// 添加数据任务
 /// </summary>
 /// <param name="messageQueue">消息队列节点</param>
 /// <param name="config">队列数据 读取配置</param>
 /// <param name="parser"></param>
 internal GetIdentity(MessageQueue.Node messageQueue, Config.QueueReader config, ref OperationParameter.NodeParser parser) : base(messageQueue)
 {
     Config          = config;
     onReturn        = parser.OnReturn;
     parser.OnReturn = null;
 }