예제 #1
0
파일: TypeSafety.cs 프로젝트: Diullei/Storm
    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);
    }
예제 #2
0
    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();
    }
예제 #3
0
파일: Classless.cs 프로젝트: Diullei/Storm
    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!");
    }
예제 #4
0
파일: Classless.cs 프로젝트: Diullei/Storm
    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!");
    }
예제 #5
0
        /**
         * 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;
        }
예제 #6
0
파일: Hello.cs 프로젝트: Diullei/Storm
    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)");
    }
예제 #7
0
      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;
      }
예제 #8
0
      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;
      }
예제 #9
0
    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();
    }
예제 #10
0
        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");
                }
            }
        }
예제 #11
0
        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();
        }
예제 #12
0
    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();
    }