static void Main() { Assembly assembly = CSScript.LoadCode( @"using System; public class Claculator : IClaculator { public void Sum(int a, int b) { Console.WriteLine(a + b); } public void Multiply(int a, int b) { Console.WriteLine(a * b); } }"); AsmHelper script = new AsmHelper(assembly); object instance = script.CreateObject("Claculator"); TypeUnsafeReflection(script, instance); TypeSafeInterface(instance); TypeSafeAlignedInterface(instance); TypeSafeDelegate(script, instance); TypeUnSafeDelegate(script, instance); }
static void Main() { Assembly assembly = CSScript.LoadCode( @"using System; public class Calculator : ICalculator { public int Add(int a, int b) { return a + b; } public string Join(string a, string b) { return a + b; } }"); AsmHelper calc = new AsmHelper(assembly); object instance = calc.CreateObject("Calculator"); //calc.CreateObject("*") can be used too if assembly has only one class defined FastInvokeDelegate methodInvoker = calc.GetMethodInvoker("Calculator.Add", 0, 0); int numOfLoops = 1000000; TestReflection(numOfLoops, calc, instance); TestFastInvoking(numOfLoops, calc, instance); TestDelegates(numOfLoops, methodInvoker, instance); TestInterface(numOfLoops, instance); TestInterfaceAlignment(numOfLoops, instance); TestDynamic(numOfLoops, instance); TestCompiledCode(numOfLoops); TestCompiledDelegate(numOfLoops); //TestMethodDelegates(); }
static void CallInstanceMethod2() { Assembly assembly = CSScript.LoadMethod( @"public void SayHello(string greeting) { Console.WriteLine(greeting); }"); AsmHelper script = new AsmHelper(assembly); object instance = script.CreateObject("*"); //wild card * can be used as the assembly contains only one class defined script.InvokeInst(instance, "*.SayHello", "Hello World!"); }
static void CallInstanceMethod1() { //all classless scripts belong to DynamicClass type generated by the CS-Script engine Assembly assembly = CSScript.LoadMethod( @"public void SayHello(string greeting) { Console.WriteLine(greeting); }"); AsmHelper script = new AsmHelper(assembly); object instance = script.CreateObject("Scripting.DynamicClass"); // or script.CreateObject("*") script.InvokeInst(instance, "Scripting.DynamicClass.SayHello", "Hello World!"); }
/** * Lädt das CS-Script interpretiert als FireSequence und führt * Sequence aus. * @returns String Nachricht */ public String LoadScript(String className) { String msg = ""; //Rückgabenachricht // Script laden und interpretieren var scriptAssembly = CSScript.Load("./Scripts/" + className + ".cs"); AsmHelper assemblyHelper = new AsmHelper(scriptAssembly); var fireSequence = (IFireSequence)assemblyHelper.CreateObject(className); msg += ExecuteFiringSequence(fireSequence); return msg; }
static void Main() { string code = @"using System; public class Script { public static void SayHello(string greeting) { Console.WriteLine(""Static: "" + greeting); } public void Say(string greeting) { Console.WriteLine(""Instance: "" + greeting); } }"; var script = new AsmHelper(CSScript.LoadCode(code, null, true)); //call static method script.Invoke("*.SayHello", "Hello World! (invoke)"); //call static method via emitted FastMethodInvoker var SayHello = script.GetStaticMethod("*.SayHello", ""); SayHello("Hello World! (emitted method)"); object obj = script.CreateObject("Script"); //call instance method script.InvokeInst(obj, "*.Say", "Hello World! (invoke)"); //call instance method via emitted FastMethodInvoker var Say = script.GetMethod(obj, "*.Say", ""); Say("Hello World! (emitted method)"); //call using C# 4.0 Dynamics dynamic script1 = CSScript.LoadCode(code) .CreateObject("*"); script1.Say("Hello World! (dynamic object)"); //call using CS-Scrit Interface Alignment IScript script2 = obj.AlignToInterface<IScript>(); script2.Say("Hello World! (aligned interface)"); }
public bool LoadScript() { string scriptFileName = InternalScriptDirectory + @"\InternalActorMoviesGrabber.csscript"; // Script support script.csscript if (!File.Exists(scriptFileName)) { Log.Error("InternalActorMoviesGrabber LoadScript() - grabber script not found: {0}", scriptFileName); return false; } try { Environment.CurrentDirectory = Config.GetFolder(Config.Dir.Base); AsmHelper script = new AsmHelper(CSScript.Load(scriptFileName, null, false)); InternalGrabber = (IIMDBInternalScriptGrabber)script.CreateObject("InternalGrabber"); } catch (Exception ex) { Log.Error("InternalActorMoviesGrabber LoadScript() - file: {0}, message : {1}", scriptFileName, ex.Message); return false; } return true; }
private static bool LoadScript(string dbId) { string scriptFileName = ScriptDirectory + @"\" + dbId + ".csscript"; // Script support script.csscript if (!File.Exists(scriptFileName)) { Log.Error("InfoGrabber LoadScript() - grabber script not found: {0}", scriptFileName); return false; } try { Environment.CurrentDirectory = Config.GetFolder(Config.Dir.Base); _asmHelper = new AsmHelper(CSScript.Load(scriptFileName, null, false)); _grabber = (IIMDBScriptGrabber)_asmHelper.CreateObject("Grabber"); } catch (Exception ex) { Log.Error("InfoGrabber LoadScript() - file: {0}, message : {1}", scriptFileName, ex.Message); return false; } return true; }
public static void SetDefaultGrabber() { GUIDialogMenu dlg = (GUIDialogMenu)GUIWindowManager.GetWindow((int)Window.WINDOW_DIALOG_MENU); if (dlg == null) { return; } dlg.Reset(); dlg.SetHeading(1263); // menu // read index file if (!File.Exists(_grabberIndexFile)) { GUIDialogOK dlgOk = (GUIDialogOK)GUIWindowManager.GetWindow((int)Window.WINDOW_DIALOG_OK); dlgOk.SetHeading(257); dlgOk.SetLine(1, GUILocalizeStrings.Get(1261)); // No grabber index found dlgOk.DoModal(GUIWindowManager.ActiveWindow); return; } _grabberList = new Dictionary<string, ComboBoxItemDatabase>(); Directory.CreateDirectory(IMDB.ScriptDirectory); DirectoryInfo di = new DirectoryInfo(IMDB.ScriptDirectory); FileInfo[] fileList = di.GetFiles("*.csscript", SearchOption.AllDirectories); GUIWaitCursor.Show(); foreach (FileInfo f in fileList) { try { CSScript.GlobalSettings.AddSearchDir(AppDomain.CurrentDomain.BaseDirectory); using (AsmHelper script = new AsmHelper(CSScript.Compile(f.FullName), "Temp", true)) { script.ProbingDirs = CSScript.GlobalSettings.SearchDirs.Split(';'); IIMDBScriptGrabber grabber = (IIMDBScriptGrabber) script.CreateObject("Grabber"); ComboBoxItemDatabase item = new ComboBoxItemDatabase(); item.Database = Path.GetFileNameWithoutExtension(f.FullName); item.Language = grabber.GetLanguage(); item.Limit = IMDB.DEFAULT_SEARCH_LIMIT.ToString(); item.Name = grabber.GetName(); _grabberList.Add(item.Database, item); } } catch (Exception ex) { Log.Error("Script grabber error file: {0}, message : {1}", f.FullName, ex.Message); } } string defaultDatabase = string.Empty; int defaultIndex = 0; int dbNumber; using (Profile.Settings xmlreader = new MPSettings()) { defaultDatabase = xmlreader.GetValueAsString("moviedatabase", "database" + 0, "IMDB"); dbNumber = xmlreader.GetValueAsInt("moviedatabase", "number", 0); } foreach (KeyValuePair<string, ComboBoxItemDatabase> grabber in _grabberList) { dlg.Add(grabber.Value.Name + " - " + grabber.Value.Language); if (defaultDatabase == grabber.Key) { dlg.SelectedLabel = defaultIndex; } else { defaultIndex++; } } GUIWaitCursor.Hide(); dlg.DoModal(GUIWindowManager.ActiveWindow); if (dlg.SelectedId == -1) { return; } using (Profile.Settings xmlwriter = new MPSettings()) { KeyValuePair<string, ComboBoxItemDatabase> grabber = _grabberList.ElementAt(dlg.SelectedLabel); if (grabber.Key != "IMDB") { if (dbNumber == 0) { dbNumber = 1; } xmlwriter.SetValue("moviedatabase", "number", dbNumber); xmlwriter.SetValue("moviedatabase", "database" + 0, grabber.Key); xmlwriter.SetValue("moviedatabase", "title" + 0, grabber.Value.Name); xmlwriter.SetValue("moviedatabase", "language" + 0, grabber.Value.Language); xmlwriter.SetValue("moviedatabase", "limit" + 0, 25); } else { for (int i = 0; i < 4; i++) { xmlwriter.SetValue("moviedatabase", "number", 0); xmlwriter.RemoveEntry("moviedatabase", "database" + i); xmlwriter.RemoveEntry("moviedatabase", "title" + i); xmlwriter.RemoveEntry("moviedatabase", "language" + i); xmlwriter.RemoveEntry("moviedatabase", "limit" + i); } } } IMDB.MovieInfoDatabase.ResetGrabber(); }
private void loadMessageParsers() { skillParser.Items.Clear(); skillParser.Items.Add(new CBWrapper(new MiningMessageParser())); skillParser.SelectedIndex = 0; String path = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData); String dirname = path + "\\" + "WurmSkillRatio"; if (!Directory.Exists(dirname)) return; String[] files = Directory.GetFiles(dirname, "*.cs"); foreach (String file in files) { try { CSScript.GlobalSettings.AddSearchDir(dirname); AsmHelper asmHelper = new AsmHelper(CSScript.Load(file)); asmHelper.ProbingDirs = CSScript.GlobalSettings.SearchDirs.Split(';'); IMessageParser handler = asmHelper.CreateObject("*").AlignToInterface<IMessageParser>(true); int index = skillParser.Items.IndexOf(handler.getName()); if (index != -1) skillParser.Items[index] = new CBWrapper(handler); else skillParser.Items.Add(new CBWrapper(handler)); } catch (Exception e) { AddLog(e.Message + "\n"); } } }
public void LoadScript(string fileName, string className) { var scriptAssembly = CSScript.Load("./Scripts/"+fileName); AsmHelper assemblyHelper = new AsmHelper(scriptAssembly); var script = (Scripts.IFireSequenceScript)assemblyHelper.CreateObject(className); script.Launch(); }
static void TestMethodDelegates() { Assembly assembly = CSScript.LoadCode( @"using System; public class Calculator { static public void PrintSum(int a, int b) { Console.WriteLine(a + b); } public int Multiply(int a, int b) { return (a * b); } }"); AsmHelper calc = new AsmHelper(assembly); //using static method delegate var PrintSum = calc.GetStaticMethod("Calculator.PrintSum", 0, 0); PrintSum(1, 2); //using instance method delegate var obj = calc.CreateObject("Calculator"); var Multiply = calc.GetMethod(obj, "Multiply", 0, 0); Console.WriteLine(Multiply(3, 5)); //using general method delegate; can invoke both static and instance methods var methodInvoker = calc.GetMethodInvoker("Calculator.PrintSum", 0, 0); methodInvoker(null, 5, 12); }
private void GetGrabbers() { // Initialize progress bar GUIDialogProgress progressDialog = (GUIDialogProgress)GUIWindowManager.GetWindow((int)Window.WINDOW_DIALOG_PROGRESS); progressDialog.Reset(); progressDialog.SetHeading(GUILocalizeStrings.Get(300037)); // Compiling.. progressDialog.ShowProgressBar(true); progressDialog.SetLine(1, ""); progressDialog.SetPercentage(0); progressDialog.StartModal(GetID); int percent = 0; _grabberList = new Dictionary<string, IIMDBScriptGrabber>(); Directory.CreateDirectory(IMDB.ScriptDirectory); DirectoryInfo di = new DirectoryInfo(IMDB.ScriptDirectory); FileInfo[] fileList = di.GetFiles("*.csscript", SearchOption.AllDirectories); foreach (FileInfo f in fileList) { try { progressDialog.SetLine(1, f.Name); progressDialog.SetPercentage(percent); Application.DoEvents(); AsmHelper script = new AsmHelper(CSScript.Load(f.FullName, null, false)); IIMDBScriptGrabber grabber = (IIMDBScriptGrabber)script.CreateObject("Grabber"); percent += 100 / (fileList.Count() - 1); progressDialog.Progress(); Application.DoEvents(); _grabberList.Add(Path.GetFileNameWithoutExtension(f.FullName), grabber); } catch (Exception ex) { Log.Error("Script grabber error file: {0}, message : {1}", f.FullName, ex.Message); } } progressDialog.Close(); }
private void GetGrabbers() { // Initialize progress bar GUIDialogProgress progressDialog = (GUIDialogProgress)GUIWindowManager.GetWindow((int)Window.WINDOW_DIALOG_PROGRESS); progressDialog.Reset(); progressDialog.SetHeading(GUILocalizeStrings.Get(300037)); // Compiling.. progressDialog.ShowProgressBar(true); progressDialog.SetLine(1, ""); progressDialog.SetPercentage(0); progressDialog.StartModal(GetID); int percent = 0; _grabberList = new Dictionary<string, ComboBoxItemDatabase>(); Directory.CreateDirectory(IMDB.ScriptDirectory); DirectoryInfo di = new DirectoryInfo(IMDB.ScriptDirectory); FileInfo[] fileList = di.GetFiles("*.csscript", SearchOption.AllDirectories); foreach (FileInfo f in fileList) { try { progressDialog.SetLine(1, f.Name); progressDialog.SetPercentage(percent); Application.DoEvents(); CSScript.GlobalSettings.AddSearchDir(AppDomain.CurrentDomain.BaseDirectory); using (AsmHelper script = new AsmHelper(CSScript.Compile(f.FullName), "Temp", true)) { script.ProbingDirs = CSScript.GlobalSettings.SearchDirs.Split(';'); IIMDBScriptGrabber grabber = (IIMDBScriptGrabber) script.CreateObject("Grabber"); ComboBoxItemDatabase item = new ComboBoxItemDatabase(); item.Database = Path.GetFileNameWithoutExtension(f.FullName); item.Language = grabber.GetLanguage(); item.Limit = IMDB.DEFAULT_SEARCH_LIMIT.ToString(); item.Name = grabber.GetName(); _grabberList.Add(item.Database, item); } percent += 100 / (fileList.Count() - 1); progressDialog.Progress(); Application.DoEvents(); } catch (Exception ex) { Log.Error("Script grabber error file: {0}, message : {1}", f.FullName, ex.Message); } } progressDialog.Close(); }