예제 #1
0
        /// <summary>
        /// Implementation of slot.
        /// </summary>
        /// <param name="signaler">Signaler used to raise the signal.</param>
        /// <param name="input">Arguments to slot.</param>
        public void Signal(ISignaler signaler, Node input)
        {
            // Making sure we're able to handle returned values and nodes from slot implementation.
            var result = new Node();

            signaler.Scope("slots.result", result, () =>
            {
                // Loading file and converting its content to lambda.
                var filename    = input.GetEx <string>();
                var hyperlambda = _service
                                  .Load(
                    PathResolver.CombinePaths(
                        _rootResolver.RootFolder,
                        filename));

                // Creating and parametrising our lambda object from argument + file's Hyperlambda content.
                var lambda = GetLambda(input, hyperlambda, filename);

                // Evaluating lambda of slot.
                signaler.Signal("eval", lambda);

                // Applying result.
                ApplyResult(input, result);
            });
        }
예제 #2
0
        /// <summary>
        /// Implementation of signal
        /// </summary>
        /// <param name="signaler">Signaler used to signal</param>
        /// <param name="input">Parameters passed from signaler</param>
        public void Signal(ISignaler signaler, Node input)
        {
            var result = new Node();

            signaler.Scope("slots.result", result, () =>
            {
                var whitelist = GetWhitelist(input);
                signaler.Scope("whitelist", whitelist.Vocabulary, () =>
                {
                    signaler.Signal("eval", whitelist.Lambda.Clone());
                });
                input.Clear();
                input.Value = result.Value;
                input.AddRange(result.Children.ToList());
            });
        }
 /// <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>
 public void Signal(ISignaler signaler, Node input)
 {
     signaler.Scope(
         "mssql.transaction",
         new Transaction(signaler, signaler.Peek <SqlConnectionWrapper>("mssql.connect").Connection),
         () => signaler.Signal("eval", input));
 }
예제 #4
0
        /// <summary>
        /// Implementation of signal
        /// </summary>
        /// <param name="signaler">Signaler used to signal</param>
        /// <param name="input">Parameters passed from signaler</param>
        public void Signal(ISignaler signaler, Node input)
        {
            var arguments = GetArguments(input);

            signaler.Scope(arguments.Name, arguments.Value, () =>
            {
                signaler.Signal("eval", arguments.Lambda);
            });
        }
예제 #5
0
        /// <summary>
        /// Slot implementation.
        /// </summary>
        /// <param name="signaler">Signaler that raised signal.</param>
        /// <param name="input">Arguments to slot.</param>
        public void Signal(ISignaler signaler, Node input)
        {
            // Making sure we're able to handle returned values and nodes from slot implementation.
            var result = new Node();

            signaler.Scope("slots.result", result, () =>
            {
                // Evaluating lambda of slot, making sure we temporary clear any existing [whitelist] declarations.
                var lambda = GetLambda(signaler, input);
                signaler.Scope("whitelist", null, () =>
                {
                    signaler.Signal("eval", lambda);
                });

                input.Clear();
                input.Value = result.Value;
                input.AddRange(result.Children.ToList());
            });
        }
예제 #6
0
 /// <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)
 {
     using (var connection = new SqlConnectionWrapper(GetConnectionString(input)))
     {
         signaler.Scope(
             "mssql.connect",
             connection, () => signaler.Signal("eval", input));
         input.Value = null;
     }
 }
예제 #7
0
 /// <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)
 {
     using (var connection = new SqlConnectionWrapper(
                Executor.GetConnectionString(
                    input,
                    "mssql",
                    "master",
                    _configuration)))
     {
         signaler.Scope(
             "mssql.connect",
             connection, () => signaler.Signal("eval", input));
         input.Value = null;
     }
 }
        /// <summary>
        /// Slot implementation.
        /// </summary>
        /// <param name="signaler">Signaler that raised the signal.</param>
        /// <param name="input">Arguments to slot.</param>
        public void Signal(ISignaler signaler, Node input)
        {
            var args = GetArgs(input);

            input.Value = _cache.GetOrCreate(args.Item1, entry =>
            {
                var result = new Node();
                signaler.Scope("slots.result", result, () =>
                {
                    signaler.Signal("eval", args.Item2.Clone());
                });
                ConfigureCacheObject(entry, input);
                return(result.Value ?? result.Clone());
            });
            input.Clear();
        }
예제 #9
0
        /// <summary>
        /// Implementation of slot.
        /// </summary>
        /// <param name="signaler">Signaler used to raise the signal.</param>
        /// <param name="input">Arguments to slot.</param>
        public void Signal(ISignaler signaler, Node input)
        {
            // Making sure we're able to handle returned values and nodes from slot implementation.
            var result = new Node();

            signaler.Scope("slots.result", result, () =>
            {
                // Loading file and converting its content to lambda.
                var filename    = input.GetEx <string>();
                var hyperlambda = _service
                                  .Load(
                    PathResolver.CombinePaths(
                        _rootResolver.RootFolder,
                        filename));
                var lambda = new Parser(hyperlambda).Lambda();

                // Preparing arguments, if there are any, making sure we remove any declarative [.arguments] first.
                lambda.Children
                .FirstOrDefault(x => x.Name == ".arguments")?
                .UnTie();
                if (input.Children.Any())
                {
                    lambda.Insert(0, new Node(".arguments", null, input.Children.ToList()));
                }
                lambda.Insert(0, new Node(".filename", filename));

                // Evaluating lambda of slot.
                signaler.Signal("eval", lambda);

                // Clearing Children collection, since it might contain input parameters.
                input.Clear();

                /*
                 * Simply setting value and children to "slots.result" stack object, since its value
                 * was initially set to its old value during startup of method.
                 */
                input.Value = result.Value;
                input.AddRange(result.Children.ToList());
            });
        }