internal PythonProcessor(ObjectOperations op, object processorClass) { var processor = (object)op.CreateInstance(processorClass); Process = op.GetMember <Func <TSource, TResult> >(processor, PythonHelper.ProcessFunction); if (op.ContainsMember(processor, PythonHelper.UnloadFunction)) { Unload = op.GetMember <Action>(processor, PythonHelper.UnloadFunction); } if (op.ContainsMember(processor, PythonHelper.LoadFunction)) { Load = op.GetMember <Action>(processor, PythonHelper.LoadFunction); } }
public static TReturn CallMethod <TReturn>(string variableName, string methodName, params object[] args) { try { ObjectOperations ops = _engine.Operations; if (_scope.ContainsVariable(variableName)) { object instance = _scope.GetVariable(variableName); if (instance != null) { if (ops.ContainsMember(instance, methodName)) { object method = ops.GetMember(instance, methodName); return((TReturn)ops.Call(method, args)); } } } return(default(TReturn)); } catch (Exception ex) { #if DEBUG throw ex; #else Log.Write(LogType.Error, ex.ToString()); return(default(TReturn)); #endif } }
public dynamic CallFunction(string method, params dynamic[] arguments) { try { ObjectOperations ops = this.mScriptEngine.Operations; if (this.mScriptClass != null) { if (ops.ContainsMember(this.mScriptClass, method)) { object instance = ops.GetMember(this.mScriptClass, method); if (instance != null) { return(ops.InvokeMember(this.mScriptClass, method, arguments)); } } else { this.mLogger.Error("Missing member when trying to execute method '{0}'.", method); this.mScriptLogger.Error("Missing member when trying to execute method '{0}'.", method); } } return(null); } catch (Exception er) { this.mLogger.Error(er, "Script exception in method '{0}'.", method); this.mScriptLogger.Error(er, "Script exception in method '{0}'.", method); throw er; } }
public static void Call(string className, string methodName, params object[] args) { ObjectOperations ops = _engine.Operations; if (_scope.ContainsVariable(className)) { object @class = _scope.GetVariable(className); object instance = ops.Call(@class); if (instance != null) { if (ops.ContainsMember(instance, methodName)) { object method = ops.GetMember(instance, methodName); ops.Call(method, args); } } } }
public static void try5(string[] args) { ScriptEngine pyEngine = Python.CreateEngine(); dynamic pyScope = pyEngine.CreateScope(); ScriptSource source = pyEngine.CreateScriptSourceFromFile("CdiClient.py"); source.Compile().Execute(pyScope); ObjectOperations ops = pyEngine.CreateOperations(pyScope); // create member objects for worker object: watermark provider, tracer, logger WatermarkProvider watermarkProvider = new WatermarkProvider(); pyScope.SetVariable("watermarkProvider", watermarkProvider); dynamic cdiWorker = pyEngine.Execute("CdiClient()", pyScope); // create an instance of the worker obj // TODO -- check that all of the right entrypoints are available. Console.WriteLine("static function doc: {0}", pyScope.SampleStaticFunction.__doc__); Console.WriteLine("indirect class doc: {0}", pyScope.CdiClient.__doc__); Console.WriteLine("direct class doc: {0}", cdiWorker.__doc__); Console.WriteLine("class function doc: {0}", cdiWorker.ProcessOneEvent.__doc__); //CheckForEntryPoint(); Console.WriteLine("NoOp: {0}", ops.ContainsMember(cdiWorker, "NoOp")); Console.WriteLine("FooBar: {0}", ops.ContainsMember(cdiWorker, "FooBar")); IList <string> memberNames = ops.GetMemberNames(cdiWorker); foreach (string s in memberNames) { Console.WriteLine(" names: {0}", s); } IList <string> signatures = ops.GetCallSignatures(cdiWorker); foreach (string s in signatures) { Console.WriteLine(" sig: {0}", s); } dynamic result; result = ops.InvokeMember(cdiWorker, "NoOp", new object[] { "hi mom" }); result = ops.InvokeMember(cdiWorker, "NoOp", new object[] { "hi dad" }); result = ops.InvokeMember(cdiWorker, "NoOp", new object[] { "watch this" }); for (int i = 0; i < 10; i++) { MockEHEvent ehEvent = new MockEHEvent(); WatermarkData wmData = new WatermarkData(); System.Threading.Thread.Sleep(args.Length > 0 ? int.Parse(args[0]) : 100); result = ops.InvokeMember(cdiWorker, "ProcessOneEvent", new object[] { ehEvent, wmData }); } WatermarkDelegate del = delegate() { Console.WriteLine("delegate"); }; result = ops.InvokeMember(cdiWorker, "ProcessDelegate", new object[] { del }); WatermarkDelegateWithVal delVal = delegate(string s) { Console.WriteLine("delegate {0}", s); }; result = ops.InvokeMember(cdiWorker, "ProcessDelegateWithVal", new object[] { delVal }); }
public bool ContainsMember(string name) { return(_ops.ContainsMember(_object, name)); }