Exemplo n.º 1
0
 private void RunFirstRunScript(IPooledEngine pooledEngine)
 {
     if (pooledEngine.UseCount == 1)
     {
         foreach (Script script in _scriptRegistry.Scripts.Where(script => script.IsStaticScript))
         {
             pooledEngine.ScriptEngine.Execute(script.Text);
         }
     }
 }
Exemplo n.º 2
0
        public string RunScript(EventInfo eventInfo, string script)
        {
            IPooledEngine pooledEngine = _scriptEnginePool.CheckoutEngine();

            RunFirstRunScript(pooledEngine);
            pooledEngine.ScriptEngine.EmbedHostObject("Event", new Event(eventInfo));
            pooledEngine.ScriptEngine.EmbedHostObject("System", new Functions.System(eventInfo));
            string response = pooledEngine.ScriptEngine.Evaluate(string.Format(DefaultClosure, script))?.ToString();

            _scriptEnginePool.CheckinEngine(pooledEngine);
            return(response);
        }
Exemplo n.º 3
0
        public string RunNamedScript(EventInfo eventInfo, string name)
        {
            IPooledEngine pooledEngine = _scriptEnginePool.CheckoutEngine();

            RunFirstRunScript(pooledEngine);
            string response = null;

            pooledEngine.ScriptEngine.EmbedHostObject("Event", new Event(eventInfo));
            pooledEngine.ScriptEngine.EmbedHostObject("System", new Functions.System(eventInfo));
            Script selectedScript = _scriptRegistry.Scripts.FirstOrDefault(script => script.Name == name && !script.IsStaticScript);

            if (selectedScript != null)
            {
                response = pooledEngine.ScriptEngine.Evaluate(string.Format(DefaultClosure, selectedScript.Text))?.ToString();
            }
            _scriptEnginePool.CheckinEngine(pooledEngine);
            return(response);
        }
Exemplo n.º 4
0
 public void CheckinEngine(IPooledEngine pooledEngine)
 {
     lock (_poolMutex)
     {
         PooledEngine unwrappedPooledEngine = (PooledEngine)pooledEngine;
         if (unwrappedPooledEngine != null && !unwrappedPooledEngine.CheckedIn)
         {
             unwrappedPooledEngine.Expired |= unwrappedPooledEngine.UseCount == _scriptEngineSettings.PoolEngineExpirationUseCount;
             if (unwrappedPooledEngine.Expired)
             {
                 DestroyEngine(unwrappedPooledEngine);
             }
             else
             {
                 Engines.AddLast(unwrappedPooledEngine);
             }
             _enginesCheckedOut--;
             unwrappedPooledEngine.CheckedIn = true;
             Monitor.Pulse(_checkoutMutex);
         }
     }
 }