/// <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); }
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); } }
/// <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); }