提交 58944366 编写于 作者: 麦壳饼's avatar 麦壳饼

更换lua脚本解释器继续尝试。

删除多余的项目》
上级 0727a502
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net5.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Jint" Version="3.0.0-beta-2035" />
</ItemGroup>
</Project>
using Jint;
using Jint.Native;
using Jint.Native.Json;
using Microsoft.Extensions.Logging;
using System;
using System.Threading;
using IoTSharp.Interpreter;
namespace IoTSharp.Interpreter.JavaScript
{
public class JavaScriptEngine
{
private readonly CancellationToken _cancellationToken;
private readonly Engine _engine;
private readonly JsonParser _parser;
private readonly ILogger _logger;
private readonly JsonSerializer _serializer;
private string _source;
public JavaScriptEngine(ILogger<JavaScriptEngine> logger, EngineSetting setting, CancellationToken cancellationToken)
{
_cancellationToken = cancellationToken;
var engine = new Engine(options =>
{
// Limit memory allocations to MB
options.LimitMemory(4_000_000);
// Set a timeout to 4 seconds.
options.TimeoutInterval(TimeSpan.FromSeconds(setting.Timeout));
// Set limit of 1000 executed statements.
// options.MaxStatements(1000);
// Use a cancellation token.
options.CancellationToken(_cancellationToken);
});
_engine = engine;
_parser = new JsonParser(_engine);
_logger = logger;
}
public string Do(string _source,string input)
{
var js = _engine.SetValue("input",_parser.Parse(input)).Evaluate(_source).ToObject();
var json= System.Text.Json.JsonSerializer.Serialize(js);
_logger.LogDebug($"source:{Environment.NewLine}{ _source}{Environment.NewLine}{Environment.NewLine}input:{Environment.NewLine}{ input}{Environment.NewLine}{Environment.NewLine} ouput:{Environment.NewLine}{ json}{Environment.NewLine}{Environment.NewLine}");
return json;
}
}
}
......@@ -7,7 +7,7 @@
<PackageReference Include="Jint" Version="3.0.0-beta-2035" />
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="5.0.0" />
<PackageReference Include="IronPython" Version="3.4.0-alpha1" />
<PackageReference Include="MoonSharp" Version="2.0.0" />
<PackageReference Include="NeoLua" Version="1.3.13" />
<PackageReference Include="Newtonsoft.Json" Version="13.0.1" />
</ItemGroup>
......
......@@ -7,7 +7,7 @@ using System.Threading;
using IoTSharp.Interpreter;
using Esprima;
namespace IoTSharp.Interpreter.JavaScript
namespace IoTSharp.Interpreter
{
public class JavaScriptEngine: ScriptEngineBase
{
......
using Microsoft.Extensions.Logging;
using Microsoft.Scripting.Hosting;
using MoonSharp.Interpreter;
using Neo.IronLua;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using System;
......@@ -11,22 +11,21 @@ namespace IoTSharp.Interpreter
{
public class LuaScriptEngine : ScriptEngineBase
{
private Script _engine;
private Lua _engine;
private LuaGlobal env;
public LuaScriptEngine(ILogger<LuaScriptEngine> logger, EngineSetting setting, CancellationToken cancellationToken) : base(logger, setting, cancellationToken)
{
_engine = new Script();
_engine = new Lua();
env = _engine.CreateEnvironment(); // Create a environment
}
public override string Do(string _source, string input)
{
var expConverter = new ExpandoObjectConverter();
dynamic obj = JsonConvert.DeserializeObject<ExpandoObject>(input, expConverter);
UserData.RegisterExtensionType(obj.GetType());
UserData.RegisterType(obj.GetType());
DynValue dvobj = UserData.Create(obj);
_engine.Globals.Set("input", dvobj);
DynValue res = _engine.DoString(_source);
var outputjson = res.ToObject().ToString();
env["input"] = obj;
var res = env.DoChunk(_source,"lua_iotsharp");
var outputjson = res.ToString();
return outputjson;
}
}
......
using IoTSharp.Interpreter;
using IoTSharp.Interpreter.JavaScript;
using Microsoft.Extensions.Logging;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using System;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册