d76c2e37e6
- introdotta funzione EgtSanitizeUtf8 da LuaLibs - aggiunta modalita' Balance su chiamata REST per Beam - aggiunta funzione CreateBWEFromMachGroup - aggiunta funzione per nesting travi - aggiunto calcolo lista soglie per finestre - copiato file WindowRESTPipe da BeamRESTPipe
514 lines
22 KiB
Lua
514 lines
22 KiB
Lua
--
|
|
-- EEEEEEEEEE GGGGGG TTTTTTTTTTTTTT
|
|
-- EEEEEEEEEE GGGGGGGGGG TTTTTTTTTTTTTT
|
|
-- EEEE GGGG GGGG TTTT
|
|
-- EEEE GGGG TTTT
|
|
-- EEEEEEE GGGG GGGGGGG TTTT
|
|
-- EEEEEEE GGGG GGGGGGG TTTT
|
|
-- EEEE GGGG GGGG TTTT
|
|
-- EEEE GGGG GGGG TTTT
|
|
-- EEEEEEEEEE GGGGGGGGGG TTTT
|
|
-- EEEEEEEEEE GGGGGG TTTT
|
|
--
|
|
-- by Egalware s.r.l.
|
|
-- Door manager by Egalware s.r.l. 2023/05/09
|
|
|
|
require( 'EgtBase')
|
|
_ENV = EgtProtectGlobal()
|
|
EgtEnableDebug( false)
|
|
|
|
-- modalita' di chiamata
|
|
QUESTION_MODES = {
|
|
NULL = 0,
|
|
PREVIEW = 1,
|
|
BOM = 2,
|
|
HARDWARE = 3,
|
|
CONFIG = 4,
|
|
}
|
|
|
|
-- modalita' di chiamata
|
|
QUESTION_HARDWARE_SUBMODES = {
|
|
NULL = 0,
|
|
LIST = 1,
|
|
CALCHARDWARE = 2,
|
|
HARDWAREOPTION = 3,
|
|
}
|
|
|
|
-- produttore
|
|
MANUFACTURERS = {
|
|
NULL = 0,
|
|
AGB = 1,
|
|
MAICO = 2,
|
|
ROTO = 3,
|
|
}
|
|
|
|
OPENINGTYPES = {
|
|
NULL = 0,
|
|
TURNONLY = 1,
|
|
TILTTURN = 2,
|
|
TILTONLY = 3,
|
|
PIVOT = 4,
|
|
FIXED = 5,
|
|
COMPLANARSLIDE = 6,
|
|
LIFTSLIDE = 7
|
|
}
|
|
|
|
_G.package.loaded.JSON = nil
|
|
local JSON = require( 'JSON')
|
|
|
|
local sIniFilePath = EgtGetIniFile()
|
|
--local sBaseDir = EgtGetStringFromIni( 'Window', 'BaseDir', '', sIniFilePath)
|
|
--EgtAddToPackagePath( sBaseDir .. '\\Designing\\?.lua')
|
|
----EgtAddToPackagePath( sBaseDir .. '\\Machining\\?.lua')
|
|
--
|
|
--_G.package.loaded.WinProject = nil
|
|
--local WinProject = require( 'WinProject')
|
|
|
|
-- creo seed random utilizzando data e clock della CPU che fornisce i decimali di secondo
|
|
math.randomseed( os.time() + math.floor( os.clock() * 1000000000))
|
|
|
|
local function AGBHardwareShapeConverter( sShape)
|
|
if sShape == 'R' then
|
|
return 'Rectangle'
|
|
elseif sShape == 'T' then
|
|
return 'Trapezoid'
|
|
elseif sShape == 'AS' then
|
|
return 'FullArc'
|
|
elseif sShape == 'AR' then
|
|
return 'Arc'
|
|
elseif sShape == 'SS' then
|
|
return 'SemiFullArc'
|
|
elseif sShape == 'SR' then
|
|
return 'SemiArc'
|
|
elseif sShape == 'C' then
|
|
return 'Circular'
|
|
end
|
|
end
|
|
|
|
local function AGBHardwareOpeningTypesConverter( sOpeningType)
|
|
if sOpeningType == 'AR' then
|
|
return 'TiltTurn'
|
|
elseif sOpeningType == 'AB' then
|
|
return 'TurnOnly'
|
|
elseif sOpeningType == 'CO' then
|
|
return 'ComplanarSlide'
|
|
elseif sOpeningType == 'AS' then
|
|
return 'LiftSlide'
|
|
elseif sOpeningType == 'BI' then
|
|
return 'Pivot'
|
|
elseif sOpeningType == 'VA' then
|
|
return 'TiltOnly'
|
|
end
|
|
end
|
|
|
|
local function Calc_HardwareModelList( nManufacturer)
|
|
-- leggo argomenti passati
|
|
if nManufacturer == MANUFACTURERS.AGB then
|
|
local sNow = os.date( '_%Y_%m_%d_%H_%M_%S', os.time())
|
|
local nRandomAdd = math.random( 1, 9999999999)
|
|
local sIdentifier = sNow .. '_' .. string.format( '%010d', nRandomAdd)
|
|
local sInputFileDir = EgtGetStringFromIni( 'AGB', 'InputFileDir', 'A:\\InputBatch', sIniFilePath)
|
|
local sInputFile = sInputFileDir .. '\\Input' .. sNow .. '.txt'
|
|
local sAGBOutputFileDir = EgtGetStringFromIni( 'AGB', 'AGBOutputFileDir', 'C:\\AGB3000NG\\OutputBatch', sIniFilePath)
|
|
local sAGBOutputKitFile = sAGBOutputFileDir .. '\\Output' .. sNow .. '.txt'
|
|
local sOutputFileDir = EgtGetStringFromIni( 'AGB', 'OutputFileDir', 'A:\\OutputBatch', sIniFilePath)
|
|
local sOutputKitFile = sOutputFileDir .. '\\Output' .. sNow .. '.txt'
|
|
-- Apro file Input in scrittura
|
|
local fhInput = io.open( sInputFile, 'w')
|
|
if not fhInput then
|
|
EgtOutLog( 'Error opening file ' .. sInputFile)
|
|
return false
|
|
end
|
|
|
|
local sText = 'OUTPUTKIT=' .. sAGBOutputKitFile .. '\n' ..
|
|
'DATAREQUEST=SE\n' ..
|
|
'RUN'
|
|
|
|
-- Scrittura nuova linea
|
|
fhInput:write( sText .. '\n')
|
|
|
|
-- Chiudo file
|
|
fhInput:close()
|
|
|
|
-- attendo scrittura output
|
|
local nWait = 0
|
|
while not EgtExistsFile( sOutputKitFile) and nWait < 500 do
|
|
nWait = nWait + 1
|
|
EgtPause( 10, true)
|
|
end
|
|
|
|
EgtPause( 10, true)
|
|
|
|
local OutputKit = {}
|
|
-- Apro file OutputKit in lettura
|
|
local fhOutputKit = io.open( sOutputKitFile, 'r')
|
|
if not fhOutputKit then
|
|
EgtOutLog( 'Error opening file ' .. sOutputKitFile)
|
|
return false
|
|
end
|
|
local nKitLineIndex = 1
|
|
for sLine in fhOutputKit:lines('l') do
|
|
local KitParams = EgtSplitString( sLine, ';')
|
|
local DescriptionSplit = EgtSplitString( KitParams[4], '_')
|
|
OutputKit[nKitLineIndex] = { Id = KitParams[3], FamilyName = DescriptionSplit[1], Description = KitParams[4], OpeningType = AGBHardwareOpeningTypesConverter( KitParams[5]), Shape = AGBHardwareShapeConverter(KitParams[6]), SashQty = tonumber(KitParams[7]), SashPosition = tonumber(KitParams[8])}
|
|
nKitLineIndex = nKitLineIndex + 1
|
|
end
|
|
-- Chiudo file OutputKit in lettura
|
|
fhOutputKit:close()
|
|
-- elimino file creati
|
|
EgtEraseFile( sInputFile)
|
|
EgtEraseFile( sOutputKitFile)
|
|
local JsonOutputKit = JSON:encode( OutputKit)
|
|
return 1, { HardwareModelList = JsonOutputKit}
|
|
else
|
|
local sErrorMsg = 'Errore! Produttore ' .. nManufacturer .. ' non gestito!'
|
|
EgtOutLog(sErrorMsg)
|
|
return 0, { Error = sErrorMsg}
|
|
end
|
|
end
|
|
|
|
local function Calc_WindowHardware( nManufacturer, QuestionArgs)
|
|
-- leggo argomenti passati
|
|
if nManufacturer == MANUFACTURERS.AGB then
|
|
local sNow = os.date( '_%Y_%m_%d_%H_%M_%S', os.time())
|
|
local nRandomAdd = math.random( 1, 9999999999)
|
|
local sIdentifier = sNow .. '_' .. string.format( '%010d', nRandomAdd)
|
|
local sInputFileDir = EgtGetStringFromIni( 'AGB', 'InputFileDir', 'A:\\InputBatch', sIniFilePath)
|
|
local sInputFile = sInputFileDir .. '\\Input' .. sNow .. '.txt'
|
|
local sAGBOutputFileDir = EgtGetStringFromIni( 'AGB', 'AGBOutputFileDir', 'C:\\AGB3000NG\\OutputBatch', sIniFilePath)
|
|
local sOutputFileDir = EgtGetStringFromIni( 'AGB', 'OutputFileDir', 'A:\\OutputBatch', sIniFilePath)
|
|
local sAGBOutputKitFile = sAGBOutputFileDir .. '\\Output' .. sNow .. '.txt'
|
|
local sAGBOutputPositionFile = sAGBOutputFileDir .. '\\OutputPosition' .. sNow .. '.txt'
|
|
local sAGBOutputLavFile = sAGBOutputFileDir .. '\\OutputLav' .. sNow .. '.txt'
|
|
local sOutputKitFile = sOutputFileDir .. '\\Output' .. sNow .. '.txt'
|
|
local sOutputPositionFile = sOutputFileDir .. '\\OutputPosition' .. sNow .. '.txt'
|
|
local sOutputMachiningFile = sOutputFileDir .. '\\OutputLav' .. sNow .. '.txt'
|
|
local sInputOptionFile = sInputFileDir .. '\\Input' .. sNow .. '.opt'
|
|
|
|
-- Apro file Input in scrittura
|
|
local fhInput = io.open( sInputFile, 'w')
|
|
if not fhInput then
|
|
local sErrorMsg = 'Error opening file ' .. sInputFile
|
|
EgtOutLog(sErrorMsg)
|
|
return 0, { Error = sErrorMsg}
|
|
end
|
|
|
|
local ReturnMode = tonumber( QuestionArgs['ReturnMode'])
|
|
local HardwareListFlag = ( ReturnMode & 1) ~= 0
|
|
local HardwarePositionListFlag = ( ReturnMode & 2) ~= 0
|
|
local MachiningListFlag = ( ReturnMode & 4) ~= 0
|
|
local HardwareOptionListFlag = ( ReturnMode & 8) ~= 0
|
|
local sInput = QuestionArgs['Input']
|
|
local sText = ''
|
|
if HardwareListFlag then
|
|
sText = sText .. 'OUTPUTKIT=' .. sAGBOutputKitFile .. '\n' ..
|
|
'EXTINFO=ON\n'
|
|
end
|
|
if MachiningListFlag then
|
|
sText = sText .. 'CNCOUTPUT=' .. sAGBOutputLavFile .. '\n'
|
|
end
|
|
if HardwarePositionListFlag then
|
|
sText = sText .. 'OUTPUTARTICLEPOSITION=' .. sAGBOutputPositionFile .. '\n'
|
|
end
|
|
if HardwareOptionListFlag and not HardwareListFlag and not MachiningListFlag and not HardwarePositionListFlag then
|
|
sText = sText .. 'OUTPUTKIT=' .. sAGBOutputKitFile .. '\n'
|
|
--sText = sText .. 'only_options=on\n'
|
|
end
|
|
sText = sText .. sInput
|
|
sText = sText .. 'RUN'
|
|
|
|
-- Scrittura nuova linea
|
|
fhInput:write( sText .. '\n')
|
|
|
|
-- Chiudo file
|
|
fhInput:close()
|
|
|
|
|
|
local OptionList = ''
|
|
if HardwareOptionListFlag then
|
|
|
|
-- attendo scrittura OptionList
|
|
local nWait = 0
|
|
while not EgtExistsFile( sInputOptionFile) and nWait < 500 do
|
|
nWait = nWait + 1
|
|
EgtPause( 10, true)
|
|
end
|
|
|
|
EgtPause( 10, true)
|
|
|
|
-- Apro file OptionList in lettura
|
|
local fhOptionList = io.open( sInputOptionFile, 'r')
|
|
if not fhOptionList then
|
|
local sErrorInputOptionFile = EgtChangePathExtension( sInputOptionFile, '.err')
|
|
local fhHardwareOptionListError = io.open( sErrorInputOptionFile, 'r')
|
|
if not fhHardwareOptionListError then
|
|
local sErrorMsg = 'Error opening file ' .. sInputOptionFile
|
|
EgtOutLog(sErrorMsg)
|
|
return 0, { Error = sErrorMsg}
|
|
else
|
|
local sErrorMsg = 'Error opening file ' .. sInputOptionFile .. '\n' .. fhHardwareOptionListError:read('*a')
|
|
fhHardwareOptionListError:close()
|
|
EgtOutLog(sErrorMsg)
|
|
return 0, { Error = sErrorMsg}
|
|
end
|
|
end
|
|
OptionList = fhOptionList:read('*a')
|
|
-- Chiudo file OutputKit in lettura
|
|
fhOptionList:close()
|
|
end
|
|
|
|
local sHardwareList = ''
|
|
if HardwareListFlag then
|
|
|
|
-- attendo scrittura OptionList
|
|
local nWait = 0
|
|
while not EgtExistsFile( sOutputKitFile) and nWait < 500 do
|
|
nWait = nWait + 1
|
|
EgtPause( 10, true)
|
|
end
|
|
|
|
EgtPause( 10, true)
|
|
|
|
local HardwareList = {}
|
|
-- Apro file OptionList in lettura
|
|
local fhHardwareList = io.open( sOutputKitFile, 'r')
|
|
if not fhHardwareList then
|
|
local sErrorOutputKitFile = EgtChangePathExtension( sOutputKitFile, '.err')
|
|
local fhHardwareListError = io.open( sErrorOutputKitFile, 'r')
|
|
if not fhHardwareListError then
|
|
local sErrorMsg = 'Error opening file ' .. sOutputKitFile
|
|
EgtOutLog(sErrorMsg)
|
|
return 0, { Error = sErrorMsg}
|
|
else
|
|
local sErrorMsg = 'Error opening file ' .. sOutputKitFile .. '\n' .. fhHardwareListError:read('*a')
|
|
fhHardwareListError:close()
|
|
EgtOutLog(sErrorMsg)
|
|
return 0, { Error = sErrorMsg}
|
|
end
|
|
end
|
|
local nHardwareLineIndex = 1
|
|
for sLine in fhHardwareList:lines('l') do
|
|
local HardwareListParams = EgtSplitString( sLine, ';')
|
|
HardwareList[nHardwareLineIndex] = { Id = HardwareListParams[1], Qty = tonumber( HardwareListParams[2]), ArtCode = HardwareListParams[3], Description = HardwareListParams[4], UM = HardwareListParams[5], Price = tonumber(HardwareListParams[6]), Weight = tonumber(HardwareListParams[7])}
|
|
nHardwareLineIndex = nHardwareLineIndex + 1
|
|
end
|
|
-- Chiudo file OutputKit in lettura
|
|
fhHardwareList:close()
|
|
-- elimino file creati
|
|
EgtEraseFile( sOutputKitFile)
|
|
sHardwareList = JSON:encode( HardwareList)
|
|
end
|
|
|
|
local sMachiningList = ''
|
|
if MachiningListFlag then
|
|
|
|
-- attendo scrittura OptionList
|
|
local nWait = 0
|
|
while not EgtExistsFile( sOutputMachiningFile) and nWait < 500 do
|
|
nWait = nWait + 1
|
|
EgtPause( 10, true)
|
|
end
|
|
|
|
EgtPause( 10, true)
|
|
|
|
local MachiningList = {}
|
|
-- Apro file OptionList in lettura
|
|
local fhMachiningList = io.open( sOutputMachiningFile, 'r')
|
|
if not fhMachiningList then
|
|
local sErrorOutputMachiningFile = EgtChangePathExtension( sOutputMachiningFile, '.err')
|
|
local fhMachiningListError = io.open( sErrorOutputMachiningFile, 'r')
|
|
if not fhMachiningListError then
|
|
local sErrorMsg = 'Error opening file ' .. sOutputMachiningFile
|
|
EgtOutLog(sErrorMsg)
|
|
return 0, { Error = sErrorMsg}
|
|
else
|
|
local sErrorMsg = 'Error opening file ' .. sOutputMachiningFile .. '\n' .. fhMachiningListError:read('*a')
|
|
fhMachiningListError:close()
|
|
EgtOutLog(sErrorMsg)
|
|
return 0, { Error = sErrorMsg}
|
|
end
|
|
end
|
|
local nMachiningLineIndex = 1
|
|
for sLine in fhMachiningList:lines('l') do
|
|
local MachiningListParams = EgtSplitString( sLine, ';')
|
|
MachiningList[nMachiningLineIndex] = { RecordID = MachiningListParams[1], Sequence = MachiningListParams[2], WindowPart = MachiningListParams[3], SashIndex = tonumber( MachiningListParams[4]), SashPart = MachiningListParams[5], PosX = tonumber(MachiningListParams[6]), PosY = tonumber(MachiningListParams[7]), PosZ = tonumber(MachiningListParams[8]),
|
|
Macro = MachiningListParams[9], AngleXY = tonumber( MachiningListParams[10]), AngleXZ = tonumber( MachiningListParams[11]), AngleYZ = tonumber( MachiningListParams[12]), RasabilitySup = tonumber( MachiningListParams[13]), RasabilityInf = tonumber( MachiningListParams[14]), Dimension = MachiningListParams[15],
|
|
Direction = tonumber( MachiningListParams[16]), Name = MachiningListParams[17], Description = MachiningListParams[18], ArtCode = MachiningListParams[19], ArtDescription = MachiningListParams[20], Side = MachiningListParams[21], Screw = tonumber(MachiningListParams[22]), Screwdriver = tonumber( MachiningListParams[23]),
|
|
Origin = MachiningListParams[24], Qty = tonumber( MachiningListParams[25])}
|
|
nMachiningLineIndex = nMachiningLineIndex + 1
|
|
end
|
|
-- Chiudo file OutputKit in lettura
|
|
fhMachiningList:close()
|
|
-- elimino file creati
|
|
EgtEraseFile( sOutputMachiningFile)
|
|
sMachiningList = JSON:encode( MachiningList)
|
|
end
|
|
|
|
local sPositionList = ''
|
|
if HardwarePositionListFlag then
|
|
|
|
-- attendo scrittura OptionList
|
|
local nWait = 0
|
|
while not EgtExistsFile( sOutputPositionFile) and nWait < 500 do
|
|
nWait = nWait + 1
|
|
EgtPause( 10, true)
|
|
end
|
|
|
|
EgtPause( 10, true)
|
|
|
|
local PositionList = {}
|
|
-- Apro file OptionList in lettura
|
|
local fhPositionList = io.open( sOutputPositionFile, 'r')
|
|
if not fhPositionList then
|
|
local sErrorOutputPositionFile = EgtChangePathExtension( sOutputPositionFile, '.err')
|
|
local fhHardwarePositionListError = io.open( sErrorOutputPositionFile, 'r')
|
|
if not fhHardwarePositionListError then
|
|
local sErrorMsg = 'Error opening file ' .. sOutputPositionFile
|
|
EgtOutLog(sErrorMsg)
|
|
return 0, { Error = sErrorMsg}
|
|
else
|
|
local sErrorMsg = 'Error opening file ' .. sOutputPositionFile .. '\n' .. fhHardwarePositionListError:read('*a')
|
|
fhHardwarePositionListError:close()
|
|
EgtOutLog(sErrorMsg)
|
|
return 0, { Error = sErrorMsg}
|
|
end
|
|
end
|
|
local nPositionLineIndex = 1
|
|
for sLine in fhPositionList:lines('l') do
|
|
local PositionListParams = EgtSplitString( sLine, ';')
|
|
PositionList[nPositionLineIndex] = { RecordID = PositionListParams[1], Sequence = PositionListParams[2], WindowPart = PositionListParams[3], SashIndex = tonumber( PositionListParams[4]), SashPart = PositionListParams[5], PosX = tonumber(PositionListParams[6]), PosY = tonumber(PositionListParams[7]), PosZ = tonumber(PositionListParams[8]),
|
|
Macro = PositionListParams[9], ArticlePosX = tonumber( PositionListParams[10]), ArticlePosY = tonumber( PositionListParams[11]), ArticlePosZ = tonumber( PositionListParams[12]), RasabilitySup = tonumber( PositionListParams[13]), RasabilityInf = tonumber( PositionListParams[14]), Dimension = PositionListParams[15],
|
|
Direction = tonumber( PositionListParams[16]), Name = PositionListParams[17], Description = PositionListParams[18], ArtCode = PositionListParams[19], ArtDescription = PositionListParams[20], Side = PositionListParams[21], Screw = tonumber(PositionListParams[22]), Screwdriver = tonumber( PositionListParams[23]),
|
|
Origin = PositionListParams[24], Qty = tonumber( PositionListParams[25]), PosXMarker = tonumber( PositionListParams[26]), PosYMarker = tonumber( PositionListParams[27]), PosXxDes = tonumber( PositionListParams[28]), PosYxDes = tonumber( PositionListParams[29]), QuotaxDes = PositionListParams[30]}
|
|
nPositionLineIndex = nPositionLineIndex + 1
|
|
end
|
|
-- Chiudo file OutputKit in lettura
|
|
fhPositionList:close()
|
|
-- elimino file creati
|
|
EgtEraseFile( sOutputPositionFile)
|
|
sPositionList = JSON:encode( PositionList)
|
|
end
|
|
|
|
-- elimino file input creati
|
|
EgtEraseFile( sInputFile)
|
|
if EgtExistsFile( sInputOptionFile) then
|
|
EgtEraseFile( sInputOptionFile)
|
|
end
|
|
|
|
local AnswerArgs = { OptionList = OptionList,
|
|
HardwareList = sHardwareList,
|
|
MachiningList = sMachiningList,
|
|
PositionList = sPositionList}
|
|
return 1, AnswerArgs
|
|
else
|
|
local sErrorMsg = 'Errore! Produttore ' .. nManufacturer .. ' non gestito!'
|
|
EgtOutLog(sErrorMsg)
|
|
return 0, { Error = sErrorMsg}
|
|
end
|
|
end
|
|
|
|
local nErr = 999
|
|
local nNilCount = 0
|
|
local bRun = true
|
|
|
|
local size = 2^13 -- good buffer size (8K)
|
|
while bRun do
|
|
local sReadLine = io.stdin:read( 'l')
|
|
EgtOutLog( 'Letta riga da stdin')
|
|
if sReadLine then
|
|
if sReadLine == 'quit' then
|
|
EgtOutLog( 'Chiusura processo')
|
|
break
|
|
end
|
|
if sReadLine ~= '' and sReadLine:find( '^#8477271#') and sReadLine:find( '#8477271#$') then
|
|
EgtOutLog( 'Lettura istruzione valida')
|
|
sReadLine = string.sub( sReadLine, 10, #sReadLine - 9)
|
|
local Question = JSON:decode( sReadLine)
|
|
local nThreadIndex = -1
|
|
local nId = -1
|
|
local ExecEnvironment = -1
|
|
local nResult = 0
|
|
local AnswerArgs = {}
|
|
if Question and Question.nThreadIndex and Question.nId and Question.Args then
|
|
nThreadIndex = tonumber( Question["nThreadIndex"])
|
|
nId = tonumber( Question["nId"])
|
|
ExecEnvironment = tonumber( Question["ExecEnvironment"])
|
|
local QuestionArgs = Question["Args"]
|
|
if QuestionArgs and QuestionArgs.UID and QuestionArgs.Mode and QuestionArgs.SubMode then
|
|
local sUid = QuestionArgs["UID"]
|
|
local sRUID = QuestionArgs["RUID"]
|
|
local nMode = tonumber( QuestionArgs["Mode"])
|
|
-- esecuzione della corretta modalita'
|
|
EgtOutLog('Ricevuta richiesta calcolo: nThreadIndex=' .. nThreadIndex .. ', nId=' .. nId .. ', UID=' .. sUid .. ', nMode=' .. nMode)
|
|
--if nMode == QUESTION_MODES.PREVIEW then
|
|
-- nResult, AnswerArgs = Calc_Preview( QuestionArgs)
|
|
--elseif nMode == QUESTION_MODES.BOM then
|
|
-- nResult, AnswerArgs = Calc_BOM( QuestionArgs)
|
|
if nMode == QUESTION_MODES.HARDWARE then
|
|
if QuestionArgs.SubMode and QuestionArgs.Manufacturer then
|
|
local nSubMode = tonumber( QuestionArgs["SubMode"])
|
|
local nManufacturer = tonumber( QuestionArgs["Manufacturer"])
|
|
EgtOutLog('SubMode=' .. nSubMode .. ', Manufacturer=' .. nManufacturer)
|
|
if nSubMode == QUESTION_HARDWARE_SUBMODES.LIST then
|
|
nResult, AnswerArgs = Calc_HardwareModelList( nManufacturer)
|
|
if AnswerArgs then
|
|
AnswerArgs.OutputChannel = QuestionArgs["OutputChannel"]
|
|
EgtOutLog('OutputChannel=' .. AnswerArgs.OutputChannel)
|
|
end
|
|
elseif nSubMode == QUESTION_HARDWARE_SUBMODES.CALCHARDWARE then
|
|
nResult, AnswerArgs = Calc_WindowHardware( nManufacturer, QuestionArgs)
|
|
if AnswerArgs then
|
|
AnswerArgs.OutputChannel = QuestionArgs["OutputChannel"]
|
|
EgtOutLog('OutputChannel=' .. AnswerArgs.OutputChannel)
|
|
end
|
|
else
|
|
nResult = 0
|
|
local sErrorMsg = 'Errore! Valore di SubMode errato!'
|
|
AnswerArgs = { Error = sErrorMsg}
|
|
EgtOutLog( sErrorMsg)
|
|
end
|
|
else
|
|
nResult = 0
|
|
local sErrorMsg = 'Errore! Domanda senza SubMode o Manufacturer che sono obbligatori!'
|
|
AnswerArgs = { Error = sErrorMsg}
|
|
EgtOutLog( sErrorMsg)
|
|
end
|
|
end
|
|
AnswerArgs.UID = sUid
|
|
AnswerArgs.RUID = sRUID or 0
|
|
else
|
|
nResult = 0
|
|
local sErrorMsg = 'Errore! Domanda senza argomenti, senza UID o Mode che sono obbligatori!'
|
|
AnswerArgs = { Error = sErrorMsg}
|
|
EgtOutLog( sErrorMsg)
|
|
end
|
|
else
|
|
nResult = 0
|
|
local sErrorMsg = 'Errore! Formato domanda non riconosciuto o senza nThreadIndex, nId o Args!'
|
|
AnswerArgs = { Error = sErrorMsg}
|
|
EgtOutLog( sErrorMsg)
|
|
end
|
|
-- do risultato
|
|
local Result = { nThreadIndex = nThreadIndex,
|
|
nId = nId,
|
|
ExecEnvironment = ExecEnvironment,
|
|
nResult = nResult,
|
|
Args = AnswerArgs}
|
|
-- invio risposta
|
|
EgtOutLog( 'Invio risposta')
|
|
local JsonResult = JSON:encode( Result)
|
|
io.stdout:write( "#8376261#" .. JsonResult .. "#8376261#" .. '\n')
|
|
io.stdout:flush()
|
|
EgtOutLog( 'Risposta inviata')
|
|
EgtNewFile()
|
|
end
|
|
else
|
|
if nNilCount >= 20 then
|
|
bRun = false
|
|
EgtOutLog( 'Errore! Lettura da stdin fallita!')
|
|
end
|
|
nNilCount = nNilCount + 1
|
|
EgtPause( 100, true)
|
|
end
|
|
end
|