public QueuedMessage(String message, int secondsDelay, AbstractEvent abstractEvent)
 {
     this.messageName = message;
     List<MessageFragment> messageFragments = new List<MessageFragment>();
     messageFragments.Add(MessageFragment.Text(message));
     this.messageFolders = getMessageFolders(messageFragments);
     this.dueTime = (DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond) + (secondsDelay * 1000) + updateInterval;
     this.abstractEvent = abstractEvent;
 }
 private void triggerEvent(String eventName, AbstractEvent abstractEvent, GameStateData previousGameState, GameStateData currentGameState)
 {
     try
     {
         abstractEvent.trigger(previousGameState, currentGameState);
     }
     catch (Exception e)
     {
         if (faultingEventsCount.ContainsKey(eventName))
         {
             faultingEventsCount[eventName]++;
             if (faultingEventsCount[eventName] > 5)
             {
                 Console.WriteLine("Event " + eventName +
                     " has failed > 5 times in this session");
             }
         }
         if (!faultingEvents.ContainsKey(eventName))
         {
             Console.WriteLine("Event " + eventName + " threw exception " + e.Message);
             Console.WriteLine("This is the first time this event has failed in this session");
             faultingEvents.Add(eventName, e.Message);
             faultingEventsCount.Add(eventName, 1);
         }
         else if (faultingEvents[eventName] != e.Message)
         {
             Console.WriteLine("Event " + eventName + " threw a different exception: " + e.Message);
             faultingEvents[eventName] = e.Message;
         }
     }
 }
 public QueuedMessage(String message, int secondsDelay, AbstractEvent abstractEvent, 
     Dictionary<String, Object> validationData)
     : this(message, secondsDelay, abstractEvent)
 {
     this.validationData = validationData;
 }
 /**
  * Queues a message with multiple fragments, with an alternate version if the first version can't be played.
  * Use this when a compound message includes a driver name which may or may not be in the set that are have associated
  * sound files. If there's no sound file for this driver name, the alternate message will be played
  */
 public QueuedMessage(String messageName, List<MessageFragment> messageFragments, List<MessageFragment> alternateMessageFragments, 
     int secondsDelay, AbstractEvent abstractEvent)
 {
     this.messageName = compoundMessageIdentifier + messageName;
     this.messageFolders = getMessageFolders(messageFragments);
     if (!canBePlayed)
     {
         Console.WriteLine("Using secondary messages for event " + messageName);
         canBePlayed = true;
         this.messageFolders = getMessageFolders(alternateMessageFragments);
         if (!canBePlayed)
         {
             Console.WriteLine("Primary and secondary messages for event " +
                 messageName + " can't be played");
         }
     }
     this.dueTime = (DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond) + (secondsDelay * 1000) + updateInterval;
     this.abstractEvent = abstractEvent;
 }
 public QueuedMessage(String messageName, List<MessageFragment> messageFragments, List<MessageFragment> alternateMessageFragments,
     int secondsDelay, AbstractEvent abstractEvent, Dictionary<String, Object> validationData)
     : this(messageName, messageFragments, alternateMessageFragments, secondsDelay, abstractEvent)
 {
     this.validationData = validationData;
 }
 public QueuedMessage(String messageName, List<MessageFragment> messageFragments, int secondsDelay, AbstractEvent abstractEvent)
 {
     this.messageName = compoundMessageIdentifier + messageName;
     this.messageFolders = getMessageFolders(messageFragments);
     this.dueTime = (DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond) + (secondsDelay * 1000) + updateInterval;
     this.abstractEvent = abstractEvent;
 }
 // used for creating a pearl of wisdom message where we need to copy the dueTime from the original
 public QueuedMessage(AbstractEvent abstractEvent)
 {
     this.abstractEvent = abstractEvent;
 }