public CompletionReport TestBehavior(Behavior b) { IOperationalBehavior operBehavior = null; try { testMode = true; Console.WriteLine("Testing behavior " + b.ToString() + " -- type " + b.GetType().Name); cachedCompletionReport = new SuccessCompletionReport(b.GetType()); HandleDecorators(b.Decorators); operBehavior = MapBehavior(b); operBehavior.Initialize(b); operBehavior.Process(null); Console.WriteLine("Result: " + cachedCompletionReport.ToString()); cachedCompletionReport.BehaviorId = b.UniqueId(); return cachedCompletionReport; } catch (Exception ex) { TraceSource.TraceEvent(TraceEventType.Error, 0, "error testing behavior {0}: {1}", b.GetType(), ex); throw; } finally { if (operBehavior != null && operBehavior is IDisposable) { ((IDisposable)operBehavior).Dispose(); } } }
private IOperationalBehavior MapBehavior(Behavior b) { BehaviorBuidler builder; if (behaviorMap.TryGetValue(b.GetType(), out builder)) { return builder(); } else { TraceSource.TraceEvent(TraceEventType.Warning, 2, "behavior type {0} does not have a mapping", b.GetType()); throw new ArgumentException("Behavior type " + b.GetType().Name + " does not have a mapping"); } }
public void OnBehaviorReceived(Behavior b) { Trace.CorrelationManager.StartLogicalOperation("OnBehaviorReceived"); Services.Dataset.MarkOperation("behavior rate", LocalCarTimeProvider.LocalNow); try { // write the trace output if (TraceSource.Switch.ShouldTrace(TraceEventType.Verbose)) { // write a verbose output TraceSource.TraceEvent(TraceEventType.Verbose, 1, "recevied behavior: {0}", b); } else { TraceSource.TraceEvent(TraceEventType.Information, 1, "received behavior: {0}", b.GetType()); } if (b != null) { HandleDecorators(b.Decorators); } if (b is NullBehavior) return; if (currentBehavior != null) { try { currentBehavior.OnBehaviorReceived(b); } catch (Exception ex) { TraceSource.TraceEvent(TraceEventType.Warning, 2, "current behavior ({0}) threw exception in OnBehaviorReceived: {1}", currentBehavior, ex); throw; } } else { Execute(b, null, false); } } finally { Trace.CorrelationManager.StopLogicalOperation(); } }