diff --git a/Supervisor.Plugin.Interface/IPluginLuaManager.vb b/Supervisor.Plugin.Interface/IPluginLuaManager.vb new file mode 100644 index 0000000..e24b455 --- /dev/null +++ b/Supervisor.Plugin.Interface/IPluginLuaManager.vb @@ -0,0 +1,8 @@ +Public Interface IPluginLuaManager + + Function PlgInit(state As Object) As Boolean + 'Function PlgGetPrivateProfileDouble(lpAppName As String, lpKeyName As String, dDefault As Double, lpFileName As String) As Double + 'Function PlgGetPrivateProfileString(lpAppName As String, lpKeyName As String, lpDefault As String, lpReturnedString As StringBuilder, nSize As Integer, lpFileName As String) As Integer + 'Function PlgWritePrivateProfileString(lpAppName As String, lpKeyName As String, lpString As String, lpFileName As String) As Boolean + +End Interface diff --git a/Supervisor.Plugin.Interface/Supervisor.Plugin.Interface.vbproj b/Supervisor.Plugin.Interface/Supervisor.Plugin.Interface.vbproj index bbbbcaf..109bf5c 100644 --- a/Supervisor.Plugin.Interface/Supervisor.Plugin.Interface.vbproj +++ b/Supervisor.Plugin.Interface/Supervisor.Plugin.Interface.vbproj @@ -83,6 +83,7 @@ + Code diff --git a/Supervisor/LUA/LuaManager.vb b/Supervisor/LUA/LuaManager.vb index 5c900d7..dc4bf8f 100644 --- a/Supervisor/LUA/LuaManager.vb +++ b/Supervisor/LUA/LuaManager.vb @@ -2,62 +2,68 @@ Imports System.Diagnostics Imports System.IO Imports KeraLua +Imports Supervisor.Plugin.Interface Public Module LuaManager - Private state As Lua + 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(state, sName, bValue) + 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(state, sName, nValue) + 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(state, sName, dValue) + 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(state, sName, sValue) + 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(state, sName, bValue) + 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(state, sName, nValue) + 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(state, sName, dValue) + 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(state, sName, sValue) + Return Lua_Aux.LuaGetGlobVar(m_state, sName, sValue) End Function Friend Function CreateGlobTable(sName As String) As Boolean - Return Lua_Aux.LuaCreateGlobTable(state, sName) + Return Lua_Aux.LuaCreateGlobTable(m_state, sName) End Function Public Function ExecFile(ByVal sPath As String) As Boolean ' verifico ambiente lua - If IsNothing(state) Then Return False + If IsNothing(m_state) Then Return False ' eseguo la linea - Dim result As LuaStatus = state.LoadFile(sPath) + Dim result As LuaStatus = m_state.LoadFile(sPath) Dim sError As String = String.Empty If result <> LuaStatus.OK Then - sError = state.ToString(1) + sError = m_state.ToString(1) EgtOutLog("Fail loading file: " & sPath & "ERROR:" & sError) End If - result = state.PCall(0, -1, 0) + result = m_state.PCall(0, -1, 0) If result <> LuaStatus.OK Then - sError = state.ToString(1) - state.Pop(1) + 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 @@ -68,19 +74,19 @@ Public Module LuaManager ' recupero la funzione If Not sName.Contains("."c) Then ' e' direttamente la funzione - state.GetGlobal(sName) + 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) - state.GetGlobal(sTableName) - If Not state.IsTable(-1) Then Return False - state.GetField(-1, sFunctionName) + 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) - state.Copy(-1, -2) - state.Pop(1) + m_state.Copy(-1, -2) + m_state.Pop(1) End If Dim nParamCount = 0 If Not IsNothing(Params) Then @@ -90,25 +96,25 @@ Public Module LuaManager For Each Param In Params Select Case Param.GetType() Case GetType(Boolean) - state.PushBoolean(CBool(Param)) + m_state.PushBoolean(CBool(Param)) Case GetType(Integer) - state.PushInteger(CInt(Param)) + m_state.PushInteger(CInt(Param)) Case GetType(Double) - state.PushNumber(CDbl(Param)) + m_state.PushNumber(CDbl(Param)) Case GetType(String) - state.PushString(CStr(Param)) + m_state.PushString(CStr(Param)) End Select Next End If ' eseguo la chiamata - Dim result As LuaStatus = state.PCall(nParamCount, -1, 0) + 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 = state.ToString(-1) - state.Pop(1) + Dim sError As String = m_state.ToString(-1) + m_state.Pop(1) EgtOutLog("Fail calling function: " & sName & " ERROR: " & sError) Return False End If @@ -116,19 +122,19 @@ Public Module LuaManager Public Function Init() As Boolean ' se già aperto, lo fermo per riavviarlo - If Not IsNothing(state) Then - state.Close() - state = Nothing + If Not IsNothing(m_state) Then + m_state.Close() + m_state = Nothing End If ' inizializzo Lua - state = New Lua() - If IsNothing(state) Then + 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 - state.OpenLibs() - If Not LuaInstallGeneral(state) Then + m_state.OpenLibs() + If Not LuaInstallGeneral(m_state) Then Return False End If Return True @@ -136,10 +142,10 @@ Public Module LuaManager Public Function Close() As Boolean ' verifico ambiente lua - If IsNothing(state) Then Return False + If IsNothing(m_state) Then Return False ' termino Lua - state.Close() - state = Nothing + m_state.Close() + m_state = Nothing Return True End Function diff --git a/Supervisor/LUA/Lua_General.vb b/Supervisor/LUA/Lua_General.vb index c4c2d54..5c801db 100644 --- a/Supervisor/LUA/Lua_General.vb +++ b/Supervisor/LUA/Lua_General.vb @@ -31,7 +31,6 @@ Public Module Lua_General Friend func_EntGetNumberFromIni As LuaFunction = AddressOf Lua_EntGetNumberFromIni Friend func_EntGetStringFromIni As LuaFunction = AddressOf Lua_EntGetStringFromIni Friend func_EntWriteStringToIni As LuaFunction = AddressOf Lua_EntWriteStringToIni - Friend func_EntGetNextDoor As LuaFunction = AddressOf Lua_EntGetNextDoor Friend func_RdsStringGet As LuaFunction = AddressOf Lua_RdsStringGet Friend func_RdsStringSetAsync As LuaFunction = AddressOf Lua_RdsStringSetAsync Friend func_RdsPublishAsync As LuaFunction = AddressOf Lua_RdsPublishAsync @@ -168,15 +167,6 @@ Public Module Lua_General Return 1 End Function - Private Function Lua_EntGetNextDoor(ByVal p As IntPtr) As Integer - Dim state = Lua.FromIntPtr(p) - LuaClearStack(state) - Dim bResult As Boolean = WritePrivateProfileString(sSec, sKey, sVal, sIniFile) - ' restituisco il risultato - LuaSetParam(state, bResult) - Return 1 - End Function - Private Function Lua_RdsStringGet(ByVal p As IntPtr) As Integer Dim state = Lua.FromIntPtr(p) If IsNothing(Map.refMainWindowVM.RedisManager) OrElse IsNothing(Map.refMainWindowVM.RedisManager.Subscriber) Then @@ -399,7 +389,6 @@ Public Module Lua_General state.Register("RdsPublishAsync", func_RdsPublishAsync) state.Register("ComReadShortVar", func_ComReadShortVar) state.Register("ComWriteShortVar", func_ComWriteShortVar) - state.Register("EntGetNextDoor", func_print) Return True End Function diff --git a/Supervisor/MainWindow/MainWindowVM.vb b/Supervisor/MainWindow/MainWindowVM.vb index 6d78817..2f59a25 100644 --- a/Supervisor/MainWindow/MainWindowVM.vb +++ b/Supervisor/MainWindow/MainWindowVM.vb @@ -69,7 +69,10 @@ Public Class MainWindowVM Application.Current.Resources.MergedDictionaries.Add(PluginDictionary) '' aggiungo MainMenu dal plugin Dim PluginMainMenu As IPluginControl = GetControlByName(Of IPluginControl)("Supervisor.Plugin.FiveLakes", "MainMenu") + '' aggiungo MainMenu dal plugin 'ContentPanel = PluginMainMenu + Dim PluginLuaManager As IPluginLuaManager = Map.refMainWindowVM.GetLuaManager(Of IPluginLuaManager)("Supervisor.Plugin.FiveLakes") + PluginLuaManager.PlgInit(LuaManager.state) ' aggiungo Project dal plugin Dim ProjectPlugin As IPluginControl = GetControlByName(Of IPluginControl)("Supervisor.Plugin.FiveLakes", "Project") ContentPanel = ProjectPlugin @@ -99,6 +102,11 @@ Public Class MainWindowVM Return DictionaryControl End Function + Friend Function GetLuaManager(Of T)(sPluginFileName As String) As IPluginLuaManager + Dim LuaManager As Object = m_Loader.LoadByTag(Of T)(GetPathByName(sPluginFileName), "LuaManager").FirstOrDefault() + Return LuaManager + End Function + #End Region ' Plugin End Class