private void RunFirstRunScript(IPooledEngine pooledEngine) { if (pooledEngine.UseCount == 1) { foreach (Script script in _scriptRegistry.Scripts.Where(script => script.IsStaticScript)) { pooledEngine.ScriptEngine.Execute(script.Text); } } }
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); }
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); }
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); } } }