Ejemplo n.º 1
0
        public void AddIndexs(RowIndexCollection indexCollection)
        {
            m_AddedIndexes.Clear();
            m_ChangedIndexes.Clear();

            m_Lock.EnterWriteLock();
            try
            {
                if (m_RowIndexes.Count == 0)
                {
                    foreach (KeyValuePair <string, List <LogRowIndex> > index in indexCollection.IndexesByItem)
                    {
                        m_RowIndexes.Add(index.Key, index.Value);
                        m_ChangedIndexes.Add(new LogIndexChangeRange(index.Key, 0, index.Value.Count));
                    }

                    m_AddedIndexes.AddRange(indexCollection.IndexesByItem.Keys);
                }
                else
                {
                    List <LogRowIndex> itemIndex;
                    foreach (KeyValuePair <string, List <LogRowIndex> > index in indexCollection.IndexesByItem)
                    {
                        if (m_RowIndexes.TryGetValue(index.Key, out itemIndex))
                        {
                            m_ChangedIndexes.Add(new LogIndexChangeRange(index.Key, itemIndex.Count, index.Value.Count));
                            itemIndex.AddRange(index.Value);
                        }
                        else
                        {
                            m_ChangedIndexes.Add(new LogIndexChangeRange(index.Key, 0, index.Value.Count));
                            m_RowIndexes.Add(index.Key, index.Value);
                            m_AddedIndexes.Add(index.Key);
                        }
                    }
                }

                m_LogRowIndexes.AddRange(indexCollection.Indexes);
            }
            finally
            {
                m_Lock.ExitWriteLock();
            }

            if (m_AddedIndexes.Count > 0)
            {
                if (OnIndexesAdded != null)
                {
                    OnIndexesAdded(this, new LogIndexAddedEventArgs(m_AddedIndexes.ToArray()));
                }
            }

            if (m_ChangedIndexes.Count > 0)
            {
                if (OnIndexesChanged != null)
                {
                    OnIndexesChanged(this, new LogIndexChangesEventArgs(m_ChangedIndexes.ToArray()));
                }
            }
        }
Ejemplo n.º 2
0
        private void ReadFromFile(int bufferSize)
        {
            byte[]             readBuffer      = new byte[bufferSize];
            byte[]             buffer          = new byte[bufferSize];
            RowIndexCollection indexCollection = new RowIndexCollection();

            try
            {
                using (Stream stream = new FileStream(Filename, FileMode.Open, FileAccess.Read, FileShare.ReadWrite, 1024 * 1024, FileOptions.Asynchronous | FileOptions.SequentialScan))
                {
                    //Test log file for invalid null
                    if (m_Position == 0)
                    {
                        stream.Seek(-1, SeekOrigin.End);
                        int value = stream.ReadByte();
                        if (value == 0)
                        {
                            throw new IOException("Invalid null in log file!");
                        }
                    }

                    stream.Position = m_Position;

                    CleanFromUTF8FormatEncoding(stream);

                    int version = CheckVersion(stream);

                    m_ParseStarted = DateTime.UtcNow;
                    m_Length       = stream.Length;

                    IAsyncResult ar = stream.BeginRead(readBuffer, 0, readBuffer.Length, null, null);
                    while (!m_Abort)
                    {
                        int read = stream.EndRead(ar);
                        if (read == 0)
                        {
                            break;
                        }

                        Buffer.BlockCopy(readBuffer, 0, buffer, 0, read);

                        ar = stream.BeginRead(readBuffer, 0, readBuffer.Length, null, null);

                        ParseBuffer(buffer, read, indexCollection);

                        m_Position += read;

                        SendProgress(ProgressStateEnum.InProgress, m_Position, m_Length, m_ParseStarted);
                    }
                }
            }
            finally
            {
                if (indexCollection.Count > 0)
                {
                    SendItems(indexCollection);
                }
            }
        }
Ejemplo n.º 3
0
 private void AddLogRowIndex(string itemID, RowIndexCollection indexCollection, LogRowIndex index)
 {
     if (m_FilteredItems == null)
     {
         indexCollection.Add(itemID, index);
     }
     else if (m_FilteredItems.Contains(itemID))
     {
         indexCollection.Add(itemID, index);
     }
 }
Ejemplo n.º 4
0
        internal void ParseRowBuffer(char[] rowBuffer, RowIndexCollection indexCollection)
        {
            if (rowBuffer[0] != '#')
            {
                string      itemID;
                LogRowIndex index;

                ParseRow(rowBuffer, m_RowBufferCount, m_StartPos, m_Separator, out index, out itemID);

                ReplaceItemname(ref itemID);

                AddLogRowIndex(itemID, indexCollection, index);
            }
            else
            {
                ParseComment(rowBuffer, m_RowBufferCount, m_StartPos - m_RowBufferCount, (ushort)m_RowBufferCount);
            }
        }
Ejemplo n.º 5
0
        internal void ParseBuffer(byte[] buffer, int bufferLength, RowIndexCollection indexCollection)
        {
            const byte nl = (byte)'\n';
            //Loop through all characters in the buffer
            int bufferIndex = 0;

            while (bufferIndex < bufferLength && m_RowBufferCount < m_RowBuffer.Length)
            {
                m_RowBuffer[m_RowBufferCount++] = (char)buffer[bufferIndex];

                if (buffer[bufferIndex++] == nl)
                {
                    ParseRowBuffer(m_RowBuffer, indexCollection);

                    m_StartPos += m_RowBufferCount;

                    m_RowBufferCount = 0;
                    //SendItems(items);
                }
            }
        }
Ejemplo n.º 6
0
 public void SendItems(RowIndexCollection indexCollection)
 {
     m_Indexes.AddIndexs(indexCollection);
 }