示例#1
0
        // <Snippet5>
        // Append records. Appending three records.
        public void AppendRecords()
        {
            Console.WriteLine("Appending Log Records...");
            SequenceNumber previous = SequenceNumber.Invalid;

            previous = sequence.Append(CreateData("Hello World!"), SequenceNumber.Invalid, SequenceNumber.Invalid, RecordAppendOptions.ForceFlush);
            previous = sequence.Append(CreateData("This is my first Logging App"), SequenceNumber.Invalid, SequenceNumber.Invalid, RecordAppendOptions.ForceFlush);
            previous = sequence.Append(CreateData("Using LogRecordSequence..."), SequenceNumber.Invalid, SequenceNumber.Invalid, RecordAppendOptions.ForceFlush);

            Console.WriteLine("Done...");
        }
        static void Main2(string[] args)
        {
            try
            {
                string myLog         = "MyMultiplexLog";
                string logStream1    = "MyMultiplexLog::MyLogStream1";
                string logStream2    = "MyMultiplexLog::MyLogStream2";
                int    containerSize = 32 * 1024;

                LogRecordSequence sequence1 = null;
                LogRecordSequence sequence2 = null;

                Console.WriteLine("Creating Multiplexed log with two streams");

                // <Snippet11>
                // Create log stream 1.
                sequence1 = new LogRecordSequence(logStream1,
                                                  FileMode.OpenOrCreate,
                                                  FileAccess.ReadWrite,
                                                  FileShare.ReadWrite);

                // Log Extents are shared between the two streams.
                // Add two extents to sequence1.
                sequence1.LogStore.Extents.Add("MyExtent0", containerSize);
                sequence1.LogStore.Extents.Add("MyExtent1");

                // Create log stream 2.
                sequence2 = new LogRecordSequence(logStream2,
                                                  FileMode.OpenOrCreate,
                                                  FileAccess.ReadWrite,
                                                  FileShare.ReadWrite);
                // </Snippet11>

                // <Snippet13>
                // Start Appending in two streams with interleaving appends.

                SequenceNumber previous1 = SequenceNumber.Invalid;
                SequenceNumber previous2 = SequenceNumber.Invalid;

                Console.WriteLine("Appending interleaving records in stream1 and stream2...");
                Console.WriteLine();
                // Append two records in stream1.
                previous1 = sequence1.Append(
                    CreateData("MyLogStream1: Hello World!"),
                    SequenceNumber.Invalid,
                    SequenceNumber.Invalid,
                    RecordAppendOptions.ForceFlush);
                previous1 = sequence1.Append(
                    CreateData("MyLogStream1: This is my first Logging App"),
                    previous1,
                    previous1,
                    RecordAppendOptions.ForceFlush);

                // Append two records in stream2.
                previous2 = sequence2.Append(
                    CreateData("MyLogStream2: Hello World!"),
                    SequenceNumber.Invalid,
                    SequenceNumber.Invalid,
                    RecordAppendOptions.ForceFlush);
                previous2 = sequence2.Append(
                    CreateData("MyLogStream2: This is my first Logging App"),
                    previous2,
                    previous2,
                    RecordAppendOptions.ForceFlush);

                // Append the third record in stream1.
                previous1 = sequence1.Append(CreateData(
                                                 "MyLogStream1: Using LogRecordSequence..."),
                                             previous1,
                                             previous1,
                                             RecordAppendOptions.ForceFlush);

                // Append the third record in stream2.
                previous2 = sequence2.Append(
                    CreateData("MyLogStream2: Using LogRecordSequence..."),
                    previous2,
                    previous2,
                    RecordAppendOptions.ForceFlush);
                // </Snippet13>

                // Read the log records from stream1 and stream2.

                Encoding enc = Encoding.Unicode;
                Console.WriteLine();
                Console.WriteLine("Reading Log Records from stream1...");
                // <Snippet10>
                foreach (LogRecord record in sequence1.ReadLogRecords(sequence1.BaseSequenceNumber, LogRecordEnumeratorType.Next))
                {
                    byte[] data = new byte[record.Data.Length];
                    record.Data.Read(data, 0, (int)record.Data.Length);
                    string mystr = enc.GetString(data);
                    Console.WriteLine("    {0}", mystr);
                }
                // </Snippet10>

                Console.WriteLine();
                Console.WriteLine("Reading the log records from stream2...");
                foreach (LogRecord record in sequence2.ReadLogRecords(sequence2.BaseSequenceNumber, LogRecordEnumeratorType.Next))
                {
                    byte[] data = new byte[record.Data.Length];
                    record.Data.Read(data, 0, (int)record.Data.Length);
                    string mystr = enc.GetString(data);
                    Console.WriteLine("    {0}", mystr);
                }
                // <Snippet12>
                Console.WriteLine();

                // Cleanup...
                sequence1.Dispose();
                sequence2.Dispose();
                // </Snippet12>

                LogStore.Delete(myLog);

                Console.WriteLine("Done...");
            }
            catch (Exception e)
            {
                Console.WriteLine("Exception thrown {0} {1}", e.GetType(), e.Message);
            }
        }