コード例 #1
0
        public Task Insert(FactContext <T> context)
        {
            return(context.WorkingMemory.Access(this, x =>
            {
                x.Add(context.Fact);

                return _sinks.All(sink => sink.Insert(context));
            }));
        }
コード例 #2
0
        Task IFactSink.Insert <T>(FactContext <T> context)
        {
            if (!_typeNodes.ContainsKey(typeof(T)))
            {
                GetTypeNode <T>();
            }

            return(Task.WhenAll(_typeNodes.Values.Select(x => x.FactSink.Insert(context))));
        }
コード例 #3
0
ファイル: BetaNode.cs プロジェクト: waqashaneef/Authority
 protected Task Matching(FactContext <TRight> context, Func <TupleContext <TLeft>, Task> callback)
 {
     return(_leftSource.All(context, async tupleContext =>
     {
         var match = await Evaluate(context, tupleContext.Tuple, context.Fact).ConfigureAwait(false);
         if (match)
         {
             await callback(new SessionTupleContext <TLeft>(context, tupleContext.Tuple)).ConfigureAwait(false);
         }
     }));
 }
コード例 #4
0
ファイル: BetaNode.cs プロジェクト: waqashaneef/Authority
 public virtual Task Insert(FactContext <TRight> context)
 {
     return(_leftSource.All(context, async tupleContext =>
     {
         var match = await Evaluate(context, tupleContext.Tuple, context.Fact).ConfigureAwait(false);
         if (match)
         {
             await MemoryNode.Insert(context, tupleContext.Tuple, context.Fact).ConfigureAwait(false);
         }
     }));
 }
コード例 #5
0
        public virtual async Task Insert(FactContext <TFact> context)
        {
            using (_log.BeginTypeScope(GetType()))
            {
                if (Evaluate(context))
                {
                    await _childNodes.All(node => node.Insert(context)).ConfigureAwait(false);

                    await _memoryNode.Value.Insert(context).ConfigureAwait(false);
                }
            }
        }
コード例 #6
0
ファイル: TypeNode.cs プロジェクト: waqashaneef/Authority
        async Task IFactSink.Insert <T>(FactContext <T> factContext)
        {
            var typeContext = factContext as FactContext <TFact>;

            if (typeContext == null)
            {
                return;
            }

            try
            {
                await _observers.PreInsert(typeContext).ConfigureAwait(false);

                await Insert(typeContext).ConfigureAwait(false);

                await _observers.PostInsert(typeContext).ConfigureAwait(false);
            }
            catch (Exception exception)
            {
                await _observers.InsertFault(typeContext, exception).ConfigureAwait(false);

                throw;
            }
        }
コード例 #7
0
 public bool Evaluate(FactContext <T> context)
 {
     return(_condition(context.Fact));
 }
コード例 #8
0
 public Task InsertFault <T>(FactContext <T> fact, Exception exception) where T : class
 {
     return(Console.Out.WriteLineAsync($"InsertFault:{typeof(T).Name}:{exception}"));
 }
コード例 #9
0
 public Task PostInsert <T>(FactContext <T> fact) where T : class
 {
     return(Console.Out.WriteLineAsync($"PostInsert:{typeof(T).Name}"));
 }
コード例 #10
0
 public Task InsertFault(FactContext <TFact> context, Exception exception)
 {
     return(_observer.InsertFault(context, exception));
 }
コード例 #11
0
 public Task PostInsert(FactContext <TFact> context)
 {
     return(_observer.PostInsert(context));
 }
コード例 #12
0
 protected override bool Evaluate(FactContext <T> context)
 {
     return(_condition.Evaluate(context));
 }
コード例 #13
0
 protected virtual bool Evaluate(FactContext <TFact> context)
 {
     return(true);
 }
コード例 #14
0
 public Task InsertFault <T>(FactContext <T> fact, Exception exception)
     where T : class
 {
     return(ForEachAsync(x => x.InsertFault(fact, exception)));
 }
コード例 #15
0
 public Task PostInsert <T>(FactContext <T> fact)
     where T : class
 {
     return(ForEachAsync(x => x.PostInsert(fact)));
 }
コード例 #16
0
 protected override bool Evaluate(FactContext <T> context)
 {
     return(_matches(context.Fact));
 }