private string InitializeEventJournal(string savePath, InitializeRecordParameter parameters)
        {
            if (string.IsNullOrEmpty(savePath))
            {
                throw new ArgumentNullException("savePath");
            }
            if (parameters == null)
            {
                throw new ArgumentNullException("parameters");
            }

            string xmlCompleteFileName = string.Empty;

            this.EventJournal = CreateEventJournal(parameters);
            if (this.EventJournal != null)
            {
                Directory.CreateDirectory(savePath);

                this.EventJournal.EventJournalHeader.CreationSource    = this.AgentUniversalName;
                this.EventJournal.EventJournalHeader.Id                = parameters.SequenceId;
                this.EventJournal.EventJournalHeader.Sequenceur        = parameters.SequenceId;
                this.EventJournal.EventJournalHeader.AcquisitionOffset = this.Configuration.Agent.Journalisation.AcquisitionOffSet;

                string filename = string.IsNullOrWhiteSpace(this.Configuration.Agent.Journalisation.CharacterizationFileName) ? this.AgentUniversalName : string.Format("{0}.{1}", this.Configuration.Agent.Journalisation.CharacterizationFileName, this.AgentUniversalName);
                xmlCompleteFileName   = Path.Combine(savePath, parameters.SequenceId + "." + filename + this.EventJournalFileExtension);
                _eventJournalRecorder = new JournalBufferedRecorder(xmlCompleteFileName, this.EventJournal, true);
            }

            return(xmlCompleteFileName);
        }
        private void CloseEventJournal()
        {
            if (_eventJournalRecorder != null)
            {
                _eventJournalRecorder.Close();
            }

            _eventJournalRecorder = null;
            this.EventJournal     = null;
        }
        private void GenerateFileJournal(AcquisitionParameter parameters)
        {
            if (parameters == null)
            {
                throw new ArgumentNullException("parameters");
            }

            if (!Directory.Exists(this.JournalAbsoluteSavePath))
            {
                return;
            }

            var now = DateTimePrecise.Now;

            var fileJournal = new FileJournal();

            fileJournal.JournalHeader.CreationDateTime = now;
            fileJournal.JournalHeader.CreationSource   = this.AgentUniversalName;
            fileJournal.JournalHeader.Id         = parameters.SequenceId;
            fileJournal.JournalHeader.Sequenceur = parameters.SequenceId;
            fileJournal.JournalHeader.Root       = Path.Combine(this.JournalRootPath, parameters.SequenceId);

            var filename            = string.IsNullOrWhiteSpace(this.Configuration.Agent.Journalisation.CharacterizationFileName) ? this.AgentUniversalName : string.Format("{0}.{1}", this.Configuration.Agent.Journalisation.CharacterizationFileName, this.AgentUniversalName);
            var xmlCompleteFileName = Path.Combine(this.JournalAbsoluteSavePath, parameters.SequenceId + "." + filename + this.FileJournalFileExtension);
            int rootLength          = 1 + Path.Combine(this.JournalRootPath, parameters.SequenceId).Length;

            using (var recorder = new JournalBufferedRecorder(xmlCompleteFileName, fileJournal, forceFlush: true))
            {
                try
                {
                    foreach (var file in SafeFileEnumerator.EnumerateFiles(this.JournalAbsoluteSavePath, "*.*", SearchOption.AllDirectories).Where(file => !Path.GetExtension(file).Equals(".fjx", StringComparison.InvariantCultureIgnoreCase)))
                    {
                        fileJournal.Add(new FileJournalEntry {
                            FileName = Path.GetFileName(file), RelativePath = file.Substring(rootLength), DateTime = now
                        });
                    }

                    foreach (var journalEntry in _fileJournalEntries)
                    {
                        fileJournal.Add(journalEntry);
                    }
                }
                finally
                {
                    fileJournal.Close();
                }
            }
        }