/// <summary> /// Handles the signal for the class. /// </summary> /// <param name="signaler">Signaler used to signal the slot.</param> /// <param name="input">Root node for invocation.</param> /// <returns>An awaitable task.</returns> public async Task SignalAsync(ISignaler signaler, Node input) { // Figuring out if caller wants to return multiple result sets or not. var multipleResultSets = Executor.HasMultipleResultSets(input); // Invoking execute helper. await Executor.ExecuteAsync( input, signaler.Peek <MySqlConnectionWrapper>("mysql.connect").Connection, signaler.Peek <Transaction>("mysql.transaction"), async (cmd, max) => { using (var reader = await cmd.ExecuteReaderAsync()) { do { Node parentNode = input; if (multipleResultSets) { parentNode = new Node(); input.Add(parentNode); } while (await reader.ReadAsync()) { if (!Executor.BuildResultRow(reader, parentNode, ref max)) { break; } } } while (multipleResultSets && await reader.NextResultAsync()); } }); }
/// <summary> /// Implementation of your slot. /// </summary> /// <param name="signaler">Signaler used to raise the signal.</param> /// <param name="input">Arguments to your slot.</param> public void Signal(ISignaler signaler, Node input) { // Figuring out if caller wants to return multiple result sets or not. var multipleResultSets = Executor.HasMultipleResultSets(input); // Invoking execute helper. Executor.Execute( input, signaler.Peek <SqlConnectionWrapper>("mssql.connect").Connection, signaler.Peek <Transaction>("mssql.transaction"), (cmd, max) => { using (var reader = cmd.ExecuteReader()) { do { Node parentNode = input; if (multipleResultSets) { parentNode = new Node(); input.Add(parentNode); } while (reader.Read()) { if (!Executor.BuildResultRow(reader, parentNode, ref max)) { break; } } } while (multipleResultSets && reader.NextResult()); } }); }