using System; using System.Threading; using Adaptive.Aeron; using Adaptive.Agrona.Concurrent.Status; using Adaptive.Archiver; using Adaptive.Cluster.Service; using static Adaptive.Archiver.AeronArchive; namespace Archiver { class Program { private static string channel = "aeron:udp?endpoint=localhost:40123"; private static int streamId = 1; static void Main(string[] args) { try { using (var archive = Connect(new Context())) { var re = FindLatestRecording(archive); if (re.startPosition == 0 && re.stopPosition == 0) archive.StartRecording(channel, streamId, Adaptive.Archiver.Codecs.SourceLocation.LOCAL); else { ChannelUriStringBuilder channelBuilder = new ChannelUriStringBuilder(); channelBuilder.Media("udp"); channelBuilder.Endpoint("localhost:40123"); channelBuilder.InitialPosition(re.stopPosition, re.initialTermId, re.termBufferLength); string newChannel = channelBuilder.Build(); archive.ExtendRecording(re.recordingId, newChannel, streamId, Adaptive.Archiver.Codecs.SourceLocation.LOCAL); } CountersReader counterReader = archive.Ctx().AeronClient().CountersReader; int counterId; while ((counterId = RecordingPos.FindCounterIdByRecording(counterReader, 0)) == CountersReader.NULL_COUNTER_ID) { Thread.Sleep(1); } Console.WriteLine("Started Recording for counter" + counterId); while (true) { if (!RecordingPos.IsActive(counterReader, counterId, 0)) { Console.WriteLine("Recording Stopped"); break; } } archive.StopRecording(channel, streamId); } } catch (Exception e) { Console.WriteLine(e); } } static RecordingExtent FindLatestRecording(AeronArchive archive) { RecordingExtent re = new RecordingExtent(); archive.ListRecordingsForUri(0, 100, channel, streamId, re); return re; } } }