歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> 使用Lua腳本語言開發出高擴展性的系統,AgileEAS.NET SOA中間件Lua腳本引擎介紹

使用Lua腳本語言開發出高擴展性的系統,AgileEAS.NET SOA中間件Lua腳本引擎介紹

日期:2017/3/1 9:49:15   编辑:Linux編程

一、前言

AgileEAS.NET SOA 中間件平台是一款基於基於敏捷並行開發思想和Microsoft .Net構件(組件)開發技術而構建的一個快速開發應用平台。用於幫助中小型軟件企業建立一條適合市場快速變化的開發團隊,以達到節省開發成本、縮短開發時間,快速適應市場變化的目的。

AgileEAS.NET SOA中間件平台提供了敏捷快速開發軟件工程的最佳實踐,通過提供大量的基礎支撐功能如IOC、ORM、SOA、分布式體系及敏捷並發開發方法所支撐的插件開發體系,以及提供了大量的實體、數據模型設計生成工具、代碼生成工具,用於幫助中小軟件開發商快速成長。

AgileEAS.NET平台充分把握目前軟件行業快速發展的新趨勢,基於敏捷並行開發、快速適應市場這樣淳樸的軟件工程實踐,采用業界廣泛使用的Microsoft .Net構件(組件)開發技術實踐了這種開發思想,幫助軟件企業實現“敏捷變化、快速適合”的目標,從而幫助軟件企業在激烈的市場競爭中贏得先機並獲得更高的回報。

二、關於Lua語言

Lua 是一個小巧的腳本語言。是巴西裡約熱內盧天主教大學(Pontifical Catholic University of Rio de Janeiro)裡的一個研究小組,由Roberto Ierusalimschy、Waldemar Celes 和 Luiz Henrique de Figueiredo所組成並於1993年開發。 其設計目的是為了嵌入應用程序中,從而為應用程序提供靈活的擴展和定制功能。

Lua語言目前應用最廣泛的領域是游戲編程領域,最早接觸和認識Lua也是因為在2008年玩金山的劍網3,通過解包讀過其中的一些游戲腳本,慢慢也看過一些其他游戲的Lua腳本,在我們開發自己的電子病歷系統的過程之中,引入了Lua腳本語言實現那些可變性非常高的場景。

.NET通過LuaInterface開源項目類庫實現對Lua的腳本調用以及Lua與C#的相互綁定,有關於這此方面的內容請大家搜索相關文章以獲得幫助。

在AgileEAS.NET SOA5.0版本之中,我們決定把在開發過程之中形成的Lua腳本引擎一並集成入AgileEAS.NET SOA中間件平台,目前Lua腳本語言被我們廣泛的應用電子病歷系統這中的病案自動評分、短信系統之中的交互式應答、和一些計劃任系統之中的計劃任務定義。

三、AgileEAS.NET SOA平台Lua引擎

AgileEAS.NET SOA5.0平台目前使用的是Lua5.1版本,使用LuaInterface實現C#與Lua的相互綁定處理,平台已經對其進行了二次封裝以提供統一的API支持,目前由EAS.LuaScript.dll程序集承載所有業務。

AgileEAS.NET SOA平台Lua引擎提供了以下接口或類型的API:

ILuaEngine,定義為一個Lua腳本引擎:

   1:using System;
   2:
   3:namespace EAS.LuaScript
   4: {
   5:/// <summary>  
   6:/// Lua腳本解析引擎。  
   7:/// </summary>  
   8:/// <remarks>
   9:/// 用於完成程序之中嵌入的動態Lua腳本,Lua腳本在AgileEAS.NET SOA 中間件之中主要用於環境的各種參數的動態解析處理之中。
  10:/// </remarks>
  11:publicinterface ILuaEngine:IDisposable
  12:     {
  13:/// <summary>
  14:/// 腳本路徑。
  15:/// </summary>
  16:string ScriptDirectory
  17:         {
  18:             get;
  19:             set;
  20:         }
  21:
  22:/// <summary>
  23:/// 輸出重定向方法/用於調試。
  24:/// </summary>
  25:         Action<object> OutAction
  26:         {
  27:             get;
  28:             set;
  29:         }
  30:
  31:/// <summary>  
  32:/// 注冊lua函數,實現Lua綁定。
  33:/// </summary>  
  34:/// <param name="luaAPIClass">lua函數類</param>  
  35:void BindLuaFunctions(object luaAPIClass);
  36:
  37:/// <summary>  
  38:/// 執行lua腳本文件。 
  39:/// </summary>  
  40:/// <param name="luaFileName">腳本文件名。</param>  
  41:/// <returns>lua腳本執行結果。</returns>
  42:object[] DoFile(string luaFileName);
  43:
  44:/// <summary>  
  45:/// 執行lua腳本文本。
  46:/// </summary>  
  47:/// <param name="chunk">lua指令。</param>  
  48:/// <returns>lua腳本執行結果。</returns>
  49:object[] DoString(string chunk);
  50:
  51:/// <summary>
  52:/// 調用Lua函數。
  53:/// </summary>
  54:/// <param name="luaFunction">函數名稱。</param>
  55:/// <param name="args">調用參數。</param>
  56:/// <returns>lua腳本執行結果。</returns>
  57:object[] Invoke(string luaFunction, paramsobject[] args);
  58:     }
  59: }

其中腳本路徑ScriptDirectory指示Lua腳本文件的存儲位置,在DoFile執行腳本文過程之中如果傳入為相關路徑則可以自動在ScriptDirectory之中尋址,ScriptDirectory默認為當前程序目錄。

DoFile:執行腳本文件並且返回執行結果。

DoString:執行腳本代碼並且返回執行結果。

Invoke:執行指定的腳本函數。

Copyright © Linux教程網 All Rights Reserved