Например, хотим сделать сообщение из какого-то скрипта в общую таблицу сообщений:
robot.lua (в общем случае будет несколько скриптов-роботов, которые пишут сообщения в таблицу)
require('StaticVar')
-- функция выводит сообщение в таблицу - добавляет переменную в пространство имен RobotMessages
function robotMessage(key, str)
stv.UseNameSpace('RobotMessages')
if str == nil then stv.SetVar(key, nil); -- удаляем из таблицы сообщение
else stv.SetVar(key, str);
end
end
function main()
while IS_RUN do
stv.UseNameSpace('RobotMessages')
if ... then robotMessage('YNDX', 'ошибка работа') end -- что-то произошло - выводим сообщение в таблицу
sleep(1000)
end;
end
А это отдельный скрипт, который перерисовывает таблицу через какой-то отрезок времени (здесь через секунду):
messages_table.lua
require('StaticVar')
function main()
while IS_RUN do
stv.UseNameSpace('RobotMessages')
local id = getRobotMessagesTableId() -- эта функция русует таблицу и возвращает ее id, из-за громозкости не привожу ее
local arr = stv.GetVarList()
local keys = {}; for key,val in pairs(arr) do if val then table.insert(keys, key) end end; -- собираем ключи с непустыми значениями
table.sort(keys);
--
local nRows, nColumns = GetTableSize(id)
--
for i=1,#keys do
if i > nRows then InsertRow(id, -1); end
SetCell(id, i, 1, keys[i]) -- выводим ключ сообщения в 1-м столбце
SetCell(id, i, 2, arr[keys[i]][1]) -- выводим текст сообщение во 2-м столбце
end
for i=#keys+1,nRows do DeleteRow(id, i) end -- удаляем лишние строки
sleep(1000)
end;
end
У меня сообщений мало оказалось, поэтому, в общем, доработки не требуются, но если будет большой объем данных, могут быть тормоза. По поводу уведомлений - логично оповещать скрипт о появлении сообщения (то есть о добавлении/изменении переменной в пространстве имен RobotMessages), а не заставлять его запрашивать данные каждую итерацию, как в примере выше.