示例#1
0
        /// <summary>
        /// Subscribes to an expression but does not retrieve old events.
        /// </summary>
        /// <param name="expression">The query to subscribe to</param>
        /// <param name="requestId">Request ID specified by client</param>
        /// <param name="callback">Callback function used to post transactions with</param>
        /// <returns>Subscription ID. used to unsubscribe and identify subscription when transactions are returned.</returns>
        public Guid Subscribe(string expression, Guid requestId, Action <Guid, Transaction> callback)
        {
            var subscriptionId = requestId;
            var compiler       = new MatchCompiler();
            var exp            = compiler.BuildExpression(expression).Compile();
            var sub            = new Subscription(subscriptionId, exp, callback);

            if (!this.subscriptions.TryAdd(subscriptionId, sub))
            {
                throw new Exception();
            }

            return(subscriptionId);
        }
示例#2
0
        static void _compile(string dir, BinaryWriter rwriter)
        {
            var files  = string.Join(" ", Directory.EnumerateFiles(dir, "*.cpp", SearchOption.AllDirectories));
            var result = MatchCompiler.Compile(files);

            if (!result.IsCompileSuccessful)
            {
                rwriter.Write(2);
                rwriter.Write(Path.GetFileNameWithoutExtension(dir));
                rwriter.Write("Compile Error.\n" + result.CompilerHints);
                _results.Add(dir, "Compile Error.\n" + result.CompilerHints);
            }
            else
            {
                _compiledFiles.Add(dir, result.CompiledExecutablePath);
            }
        }
示例#3
0
        /// <summary>
        /// Lists and subscribes to a query. This will fetch all rows that match the query and any subsequent matches will also be returned.
        /// </summary>
        /// <param name="expression">The query to subscribe to</param>
        /// <param name="requestId">Request ID specified by client</param>
        /// <param name="callback">Callback function used to post transactions with</param>
        /// <returns>Subscription ID. used to unsubscribe and identify subscription when transactions are returned.</returns>
        public async Task <Guid> ListAndSubscribe(string expression, Guid requestId, Action <Guid, Transaction> callback)
        {
            var subscriptionId = requestId;
            var compiler       = new MatchCompiler();
            var exp            = compiler.BuildExpression(expression).Compile();
            var sub            = new Subscription(subscriptionId, exp, callback);

            if (!this.subscriptions.TryAdd(subscriptionId, sub))
            {
                return(requestId);
            }

            foreach (var trans in (await this.Storage.QueryAsync()).Where(exp))
            {
                callback(requestId, trans);
            }

            return(subscriptionId);
        }