Ejemplo n.º 1
0
        public void TestEngineCount()
        {
            var pool = new EnginePool();

            Assert.Equal(5, pool.EngineCount);

            var engine1 = pool.GetEngine();

            Assert.Equal(4, pool.EngineCount);
            engine1.Dispose();
            Assert.Equal(5, pool.EngineCount);

            var engines = new List <EnginePool.JSEngine>();

            for (var i = 0; i <= 5; i++)
            {
                engines.Add(pool.GetEngine());
            }

            Assert.Equal(0, pool.EngineCount);

            foreach (var e in engines)
            {
                e.Dispose();
            }

            Assert.Equal(5, pool.EngineCount);
        }
Ejemplo n.º 2
0
        public void TestExecute()
        {
            var pool = new EnginePool(new EnginePool.EnginePoolConfig(e =>
            {
                e.SetValue("print", new Action <string>(s => Console.WriteLine(s)));
                e.SetValue("add", new Func <double, double, double>((a, b) => a + b));
            }));

            using var engine = pool.GetEngine();

            engine.Execute("print();");
            Assert.Equal(15, engine.Execute <double>("add(10, 5);"));
        }
Ejemplo n.º 3
0
        public void TestFunctionCalling()
        {
            var pool = new EnginePool(new EnginePool.EnginePoolConfig(e =>
            {
                e.SetValue("print", new Action <string>(s => Console.WriteLine(s)));
                e.SetValue("add", new Func <double, double, double>((a, b) => a + b));
            }));

            using var engine = pool.GetEngine();

            engine.CallFunction("print");
            Assert.Equal(15, engine.CallFunction <double>("add", 5, 10));
        }
Ejemplo n.º 4
0
        public Message Decrypt(string publicKey, string secretPhrase)
        {
            using Engine engine = EnginePool.Get();
            byte[] sharedKey = Convert.PrivateAndPublicToSharedKey(Convert.SecretPhraseToPrivateKey(secretPhrase), Convert.HexToBytes(publicKey));
            for (int i = 0; i < Salt.Length; ++i)
            {
                sharedKey[i] ^= Salt[i];
            }

            byte[] decrypted = engine.AesDecrypt(Data, sharedKey);
            if (IsCompressed)
            {
                decrypted = engine.Inflate(decrypted);
            }

            return(new Message(IsText ? Convert.BytesToString(decrypted) : Convert.BytesToHex(decrypted)));
        }
Ejemplo n.º 5
0
        public void TestCreateCustom()
        {
            var pool = new EnginePool(new EnginePool.EnginePoolConfig(e =>
            {
                e.SetValue("a", 5);
                e.SetValue("sleep", new Action <int>(x => Thread.Sleep(x)));
            }));

            for (var i = 0; i < 100; i++)
            {
                using var engine = pool.GetEngine();
                var result = engine.Execute <double>("a;");
                Assert.Equal(5, result);
            }

            Parallel.For(0, 100, i =>
            {
                using var engine = pool.GetEngine();
                var result       = engine.Execute <double>("a;");
                engine.CallFunction("sleep", 50);
                Assert.Equal(5, result);
            });
        }
Ejemplo n.º 6
0
 public void TestCreateDefault()
 {
     var pool = new EnginePool();
     //pool.Dispose();
 }