From 350370a084aa92f97a4a566f10c009a9456d9643 Mon Sep 17 00:00:00 2001 From: Mikayla Fischler Date: Thu, 8 Sep 2022 12:19:19 -0400 Subject: [PATCH] notify subscriber right away if there is already a value present --- scada-common/psil.lua | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/scada-common/psil.lua b/scada-common/psil.lua index 9901e97..ddadf36 100644 --- a/scada-common/psil.lua +++ b/scada-common/psil.lua @@ -13,17 +13,26 @@ function psil.create() -- allocate a new interconnect field ---@key string data key local function alloc(key) - self.ic[key] = { subscribers = {}, value = 0 } + self.ic[key] = { subscribers = {}, value = nil } end ---@class psil local public = {} -- subscribe to a data object in the interconnect + -- + -- will call func() right away if a value is already avaliable ---@param key string data key ---@param func function function to call on change function public.subscribe(key, func) - if self.ic[key] == nil then alloc(key) end + -- allocate new key if not found or notify if value is found + if self.ic[key] == nil then + alloc(key) + elseif self.ic[key].value ~= nil then + func(self.ic[key].value) + end + + -- subscribe to key table.insert(self.ic[key].subscribers, { notify = func }) end