public int CreateDump(IDumpCreationContext context, CancellationToken ct, IProgress <int> progress = null) { try { MQMessage message = null; bool transactionOpened = false; using (var reader = new MQReader(_qSource.NewConnectionCore(), context.Settings.UseTransaction, context.Settings.IdFilter, context.Settings.Converter)) { var writer = new DumpWriter(context.Output, context.Settings, _qSource.QueueManager.Name, _qSource.Name, _culture, _encoding); while (reader.Read(ref message)) { if (ct.IsCancellationRequested) { break; } // TODO : Implement filter logic bool addIt = true; if (addIt) { writer.WriteMessage(message); if (!context.Settings.LeaveMessages) { // Force remove of the message if (reader.Read(ref message, true) && context.Settings.UseTransaction) { transactionOpened = true; } if (context.Settings.UseTransaction && context.Settings.TransactionSize > 0 && writer.Counter % context.Settings.TransactionSize == 0) { // Commit batch reader.Commit(); transactionOpened = false; } } } progress?.Report(writer.Counter); } if (!context.Settings.LeaveMessages && context.Settings.UseTransaction && transactionOpened) { // Make sure to commit latest transaction reader.Commit(); } return(writer.Counter); } } catch (MQException ibmEx) { throw ibmEx.ToMqException(AddExtraInfoToError); } }
public int CreateDump(DumpCreationSettings settings, CancellationToken ct, IProgress <int> progress = null) { try { using (var sw = File.CreateText(settings.FileName)) { if (settings.WriteHeader) { CreateDumpHeader(sw); } var counter = 0; var enumerator = _qSource.NewConnectionCore().DumpAllMessagesCore(settings.LeaveMessages); while (enumerator.MoveNext()) { if (progress != null && ct.IsCancellationRequested) { break; } counter++; if (settings.WriteMessageIndex) { sw.WriteLine("* Index {0}", counter); } DumpMessage(enumerator.Current, sw); if (counter % 50 == 0) { progress?.Report(counter); } } progress?.Report(counter); return(counter); } } catch (MQException ibmEx) { throw ibmEx.ToMqException(AddExtraInfoToError); } }