void Update() { if (directives.Count > 0) { if (current_directive == null) { current_directive = directives.OrderBy (i => i.Priority).First (); current_directive.Execute (this); } else if (current_directive.IsComplete (this)) { current_directive.Behavior.ConcludeDirective (current_directive); directives.Remove (current_directive); current_directive = null; } } }
internal bool ProcessDirective(string line, StringBuilder output) { string directiveName; string[] arguments; if (this.ParseDirective(line, output, out directiveName, out arguments)) { IDirective directive = this.directives.FirstOrDefault(d => String.Equals(d.Name, directiveName, StringComparison.OrdinalIgnoreCase)); if (directive == null) { output.AppendLine(Invariant($"Unknown directive type '{directiveName}'!")); return(false); } return(directive.Execute(arguments, output)); } return(false); }