- aggiunta gestione LuaManager per plugin
This commit is contained in:
@@ -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
|
||||
@@ -83,6 +83,7 @@
|
||||
<ItemGroup>
|
||||
<Compile Include="IHost.vb" />
|
||||
<Compile Include="IPluginControl.vb" />
|
||||
<Compile Include="IPluginLuaManager.vb" />
|
||||
<Compile Include="My Project\AssemblyInfo.vb">
|
||||
<SubType>Code</SubType>
|
||||
</Compile>
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user