public override async Task <Void> FailedContextHandler(ContextInfo request, ServerCallContext context) { try { Logger.Log(Level.Info, "Failed context event id {0}", request.ContextId); BridgeActiveContext activeContext; BridgeActiveContext parentContext = null; lock (_lock) { if (_activeContexts.TryGetValue(request.ContextId, out activeContext)) { _activeContexts.Remove(request.ContextId); parentContext = activeContext.ParentId.IsPresent() ? _activeContexts[activeContext.ParentId.Value] : null; } } if (activeContext != null) { await _driverBridge.DispatchFailedContextEvent( new BridgeFailedContext( activeContext.Id, activeContext.EvaluatorId, CreateEvaluatorDescriptor(request.EvaluatorDescriptorInfo), Optional <IActiveContext> .OfNullable(parentContext))); } else { Logger.Log(Level.Error, "unknown failed context {0}", request.ContextId); } } catch (Exception ex) { _bridgeClock.Dispose(ex); } return(Void); }
private BridgeActiveContext GetOrCreateActiveContext(ContextInfo info) { lock (_lock) { if (_activeContexts.TryGetValue(info.ContextId, out BridgeActiveContext context)) { Logger.Log(Level.Verbose, "Context already exists, use it: {0}", info.ContextId); return(context); } Logger.Log(Level.Verbose, "Create active context {0}", info.ContextId); context = new BridgeActiveContext( _driverServiceClient, info.ContextId, info.EvaluatorId, Optional <string> .OfNullable(info.ParentId.Length == 0 ? null : info.ParentId), CreateEvaluatorDescriptor(info.EvaluatorDescriptorInfo)); _activeContexts.Add(info.ContextId, context); return(context); } }