Пример #1
0
        //--------------------------------------------------------------------
        //private void ExampleHowToExtendTheHeader()
        //{
        //    // The code below shows how to extend the header.
        //    // In this example, the MyExtraData must implement the IFastSerializer.
        //    // Extending the header in the context of a text, has very little usage
        //    // but nonetheless, is supported for those odd rare cases if needed.
        //    // FFileHeader.FExtraData["MyExtraData"] = new FastSerializerObjectData(new MyExtraData());
        //}
        /// -------------------------------------------------------------------
        private void ProcessMessages(ReflectInsightPackage[] messages)
        {
            OpenFileStream();

            try
            {
                Stream   baseStream = (FFileStream as StreamWriter).BaseStream;
                DateTime dt         = DateTime.Now.ToUniversalTime();

                foreach (ReflectInsightPackage message in messages)
                {
                    if (message.FMessageType == MessageType.PurgeLogFile)
                    {
                        PurgeLogFile();
                        continue;
                    }

                    if (message.FMessageType == MessageType.Clear || RIUtils.IsViewerSpecificMessageType(message.FMessageType))
                    {
                        continue;
                    }

                    message.FDateTime   = dt;
                    message.FSequenceID = FFileHeader.GetNextSequenceId();
                    String txtMessage = MessageText.Convert(message, FDetails, FMessagePattern, FTimePatterns);

                    if (FileHelper.ShouldAutoSave(FFileHeader, FAutoSave, baseStream, FOnSize, message.FDateTime, txtMessage.Length))
                    {
                        ForceAutoSave();

                        message.FSequenceID = FFileHeader.GetNextSequenceId();
                        txtMessage          = MessageText.Convert(message, FDetails, FMessagePattern, FTimePatterns);
                    }

                    if (FFileHeader.FInitDateTime == DateTime.MinValue)
                    {
                        FFileHeader.FInitDateTime  = message.FDateTime;
                        FFileHeader.FFirstDateTime = message.FDateTime;
                        FFileHeader.FLastDateTime  = message.FDateTime;
                    }

                    FFileHeader.FMessageCount++;
                    FFileHeader.FLastDateTime = message.FDateTime;
                    FFileStream.Write(txtMessage);

                    DebugManager.Sleep(0);
                }
            }
            finally
            {
                CloseFileStream(true);
            }
        }
        //--------------------------------------------------------------------
        //private void ExampleHowToExtendTheHeader()
        //{
        //    // The code below shows how to extend the header.
        //    // Keep in mind that when you extend the header, you must rewrite
        //    // the file. Try to avoid extending the header frequently as this will
        //    // impact performance.
        //    //
        //    // In this example, the MyExtraData must implement the IFastSerializer.

        //    //RIFileHeader newHeader = (RIFileHeader)FFileHeader.Clone();
        //    //newHeader.FExtraData["MyExtraData"] = new FastSerializerObjectData(new MyExtraData());
        //}
        ///--------------------------------------------------------------------
        private void ProcessMessages(ReflectInsightPackage[] messages)
        {
            if (FCreateDirectory)
            {
                Directory.CreateDirectory(Path.GetDirectoryName(FFilePath));
                FCreateDirectory = false;
            }

            OpenFileStream();

            try
            {
                using (var pool = FastFormatterPool.Pool.Container())
                {
                    DateTime dt = DateTime.Now.ToUniversalTime();

                    foreach (ReflectInsightPackage message in messages)
                    {
                        if (message.FMessageType == MessageType.PurgeLogFile)
                        {
                            PurgeLogFile();
                            continue;
                        }

                        if (message.FMessageType != MessageType.Clear)
                        {
                            if (RIUtils.IsViewerSpecificMessageType(message.FMessageType))
                            {
                                continue;
                            }

                            // serialize the message
                            message.FDateTime   = dt;
                            message.FSequenceID = FFileHeader.GetNextSequenceId();
                            Byte[] bMessage = pool.Instance.Serialize(message);

                            if (FileHelper.ShouldAutoSave(FFileHeader, FAutoSave, FFileStream, FOnSize, message.FDateTime, bMessage.Length))
                            {
                                ForceAutoSave();

                                // because the previous message was serialized with the previous last sequence id
                                // we need to re-serialize the message with the new sequence id

                                message.FSequenceID = FFileHeader.GetNextSequenceId();
                                bMessage            = pool.Instance.Serialize(message);
                            }

                            if (FFileHeader.FInitDateTime == DateTime.MinValue)
                            {
                                FFileHeader.FInitDateTime  = message.FDateTime;
                                FFileHeader.FFirstDateTime = message.FDateTime;
                                FFileHeader.FLastDateTime  = message.FDateTime;
                            }

                            FFileHeader.FMessageCount++;
                            FFileHeader.FLastDateTime = message.FDateTime;
                            FFileStream.Write(bMessage, 0, bMessage.Length);
                        }
                        else // clear
                        {
                            RewriteFileIgnoreRequestor((RIFileHeader)FFileHeader.Clone(), pool.Instance, message.FSessionID, message.FRequestID);
                        }

                        DebugManager.Sleep(0);
                    }
                }
            }
            finally
            {
                CloseFileStream(true);
            }
        }