Пример #1
0
        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);
        }
Пример #2
0
        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);
            }
        }