Imports System Imports System.Diagnostics Imports System.IO Imports KeraLua Imports Effector.Plugin.Interface Public Module LuaManager Private m_state As Lua Friend ReadOnly Property state As Lua Get Return m_state End Get End Property Friend Function SetGlobVar(sName As String, bValue As Boolean) As Boolean Return Lua_Aux.LuaSetGlobVar(m_state, sName, bValue) End Function Friend Function SetGlobVar(sName As String, nValue As Integer) As Boolean Return Lua_Aux.LuaSetGlobVar(m_state, sName, nValue) End Function Friend Function SetGlobVar(sName As String, dValue As Double) As Boolean Return Lua_Aux.LuaSetGlobVar(m_state, sName, dValue) End Function Friend Function SetGlobVar(sName As String, sValue As String) As Boolean Return Lua_Aux.LuaSetGlobVar(m_state, sName, sValue) End Function Friend Function GetGlobVar(sName As String, ByRef bValue As Boolean) As Boolean Return Lua_Aux.LuaGetGlobVar(m_state, sName, bValue) End Function Friend Function GetGlobVar(sName As String, ByRef nValue As Integer) As Boolean Return Lua_Aux.LuaGetGlobVar(m_state, sName, nValue) End Function Friend Function GetGlobVar(sName As String, ByRef dValue As Double) As Boolean Return Lua_Aux.LuaGetGlobVar(m_state, sName, dValue) End Function Friend Function GetGlobVar(sName As String, ByRef sValue As String) As Boolean Return Lua_Aux.LuaGetGlobVar(m_state, sName, sValue) End Function Friend Function CreateGlobTable(sName As String) As Boolean Return Lua_Aux.LuaCreateGlobTable(m_state, sName) End Function Public Function ExecFile(ByVal sPath As String) As Boolean ' verifico ambiente lua If IsNothing(m_state) Then Return False ' eseguo la linea Dim result As LuaStatus = m_state.LoadFile(sPath) Dim sError As String = String.Empty If result <> LuaStatus.OK Then sError = m_state.ToString(1) EgtOutLog("Fail loading file: " & sPath & "ERROR:" & sError) End If result = m_state.PCall(0, -1, 0) If result <> LuaStatus.OK Then sError = m_state.ToString(1) m_state.Pop(1) EgtOutLog("Fail calling file: " & sPath & " ERROR: " & If(String.IsNullOrWhiteSpace(sError), "Unknown", sError)) End If Return result = LuaStatus.OK End Function Public Function ExecLuaFunction(ByVal sName As String, nReturns As Integer, Params() As Object) As Boolean ' recupero la funzione If Not sName.Contains("."c) Then ' e' direttamente la funzione m_state.GetGlobal(sName) Else ' e' in una table Dim sTableName As String = "", sFunctionName As String = "" Dim sParams() As String = sName.Split("."c) sTableName = sParams(0) sFunctionName = sParams(1) m_state.GetGlobal(sTableName) If Not m_state.IsTable(-1) Then Return False m_state.GetField(-1, sFunctionName) ' porto la funzione uno slot sotto e diminuisco lo stack di uno (per essere come caso sopra) m_state.Copy(-1, -2) m_state.Pop(1) End If Dim nParamCount = 0 If Not IsNothing(Params) Then ' numero di parametri nParamCount = Params.Count() ' inserisco i parametri sullo stack For Each Param In Params Select Case Param.GetType() Case GetType(Boolean) m_state.PushBoolean(CBool(Param)) Case GetType(Integer) m_state.PushInteger(CInt(Param)) Case GetType(Double) m_state.PushNumber(CDbl(Param)) Case GetType(String) m_state.PushString(CStr(Param)) End Select Next End If ' eseguo la chiamata Dim result As LuaStatus = m_state.PCall(nParamCount, -1, 0) ' senza errori If result = LuaStatus.OK Then Return True Else ' recupero il messaggio di errore Dim sError As String = m_state.ToString(-1) m_state.Pop(1) EgtOutLog("Fail calling function: " & sName & " ERROR: " & sError) Return False End If End Function Public Function Init() As Boolean ' se già aperto, lo fermo per riavviarlo If Not IsNothing(m_state) Then m_state.Close() m_state = Nothing End If ' inizializzo Lua m_state = New Lua() If IsNothing(m_state) Then EgtOutLog("Error in Lua interpreter starting (LuaManager.Init)") Return False End If ' carico le librerie standard m_state.OpenLibs() If Not LuaInstallGeneral(m_state) Then Return False End If Return True End Function Public Function Close() As Boolean ' verifico ambiente lua If IsNothing(m_state) Then Return False ' termino Lua m_state.Close() m_state = Nothing Return True End Function End Module