public void Initialize(object domainEventHandler)
 {
     if (domainEventHandler is IReplayable)
     {
         _logger.SetOpType("replay", domainEventHandler.GetType().Name);
         IReplayable replayableHandler = (IReplayable)domainEventHandler;
         if (replayableHandler.ShouldReplay())
         {
             //replay events
             var invokerOfThisType = _catalog.GetAllHandlerForSpecificHandlertype(domainEventHandler.GetType());
             var eventList         = invokerOfThisType
                                     .Select(i => i.Value.HandledType)
                                     .ToArray();
             _logger.Info("[replay] - Handler " + domainEventHandler.GetType().Name + " handle " + eventList.Length + " domain events\n" +
                          eventList.Select(t => t.Name).Aggregate((s1, s2) => s1 + "\n" + s2));
             replayableHandler.StartReplay();
             var   allEvents  = _rawEventStore.LoadEvents(eventList);
             Int32 eventcount = 0;
             foreach (var domainEvent in allEvents)
             {
                 invokerOfThisType[domainEvent.GetType()].Invoke(domainEvent);
                 eventcount++;
             }
             replayableHandler.EndReplay();
             _logger.Info("[replay] - replayed " + eventcount + " events for handler " + domainEventHandler.GetType().Name);
         }
         _logger.RemoveOpType();
     }
 }
 private void CallUpdatePlayMethods(float i_LastPlayedTime, float i_PlayTime)
 {
     for (int index = 0; index < m_Replayables.Count; ++index)
     {
         IReplayable replayable = m_Replayables[index];
         if (replayable != null)
         {
             replayable.UpdatePlay(i_LastPlayedTime, i_PlayTime);
         }
     }
 }
 private void CallStopPlayMethods()
 {
     for (int index = 0; index < m_Replayables.Count; ++index)
     {
         IReplayable replayable = m_Replayables[index];
         if (replayable != null)
         {
             replayable.StopPlay();
         }
     }
 }
 private void CallStartPlayMethods(float i_StartTime)
 {
     for (int index = 0; index < m_Replayables.Count; ++index)
     {
         IReplayable replayable = m_Replayables[index];
         if (replayable != null)
         {
             replayable.StartPlay(i_StartTime);
         }
     }
 }
 private void CallUpdateRecordMethods(float i_DeltaTime)
 {
     for (int index = 0; index < m_Replayables.Count; ++index)
     {
         IReplayable replayable = m_Replayables[index];
         if (replayable != null)
         {
             replayable.UpdateRecord(i_DeltaTime);
         }
     }
 }