Пример #1
0
        public void Start()
        {
            OutputWriter.WriteLine("PAQK.Reply");
            OutputWriter.WriteLine("---------");
            OutputWriter.WriteLine("  Events Database:");
            OutputWriter.WriteLine("      {0}", Settings.MongoEventsConnectionString);
            OutputWriter.WriteLine("  View Database:");
            OutputWriter.WriteLine("      {0}", Settings.MongoViewConnectionString);


            if (InputReader != null)
            {
                OutputWriter.WriteLine();
                OutputWriter.WriteLine();
                OutputWriter.WriteLine("Are you sure that you want to drop these databases? (type 'yes' or 'no')");
                OutputWriter.WriteLine("   {0}", Settings.MongoViewConnectionString);

                OutputWriter.Write("> ");

                var answer = InputReader.ReadLine();
                if (String.Compare(answer, "yes", StringComparison.OrdinalIgnoreCase) != 0)
                {
                    return;
                }
            }


            try
            {
                BeforeReplayPreparations();
                UniformDatabase.EnterInMemoryMode();

                var transitions = TransitionRepository.GetTransitions();
                var stopwatch   = Stopwatch.StartNew();

                var counter = 0;
                foreach (var transition in transitions)
                {
                    foreach (var evnt in transition.Events)
                    {
                        if (++counter % 10000 == 0)
                        {
                            OutputWriter.WriteLine("Events #{0:n0}", counter);
                        }

                        DispatchAsync((IEvent)evnt.Data);
                    }
                }

                OutputWriter.WriteLine("Waiting for dispatch completion...");
                WaitForDispatchCompletion();

                OutputWriter.WriteLine("Flushing...");
                UniformDatabase.LeaveInMemoryMode(true);
                stopwatch.Stop();
                OutputWriter.WriteLine("Flush completed");

                var message = String.Format("Replayed in {0}. Total number of events {1:n0}",
                                            stopwatch.Elapsed.ToReadableString(), counter);

                logger.Info(message);
                OutputWriter.WriteLine(message);

                if (InputReader != null)
                {
                    InputReader.ReadKey();
                }
            }
            catch (Exception ex)
            {
                logger.Fatal(ex);
                OutputWriter.WriteLine(ex.Message);
            }
        }