implementation module Tasks.mTaskTask import mTask import iTasks import Devices.mTaskDevice import iTasks._Framework.Serialization derive class iTask MTaskTask, MTaskInterval, Main, ByteCode, Stmt, Expr, BC, BCState, RWST, Identity makeTask :: String Int -> Task MTaskTask makeTask name ident = get currentDateTime @ \dt->{MTaskTask | name=name,ident=ident,dateAdded=dt} sendTaskToDevice :: String (Main (ByteCode () Stmt)) (MTaskDevice, MTaskInterval) -> Task () sendTaskToDevice wta mTask (device, timeout) = get bcStateStore @ toMessages timeout mTask >>= \(msgs, st1)->set st1 bcStateStore >>| toSDSRecords msgs st1 device >>= \sdss->upd (mergeShares sdss) sdsStore >>| sendMessages msgs device >>| makeTask wta -1 >>= withDevices device o addTask @! () where sharename i = device.deviceChannels +++ "-" +++ toString i toSDSRecords :: [MTaskMSGSend] BCState MTaskDevice -> Task [MTaskShare] toSDSRecords s st device = sequence "" [makeShare wta device.deviceName sdsi sdsval \\{sdsi,sdspub,sdsval}<-st.sdss , (MTSds sdsi` _)<-s | sdsi == sdsi`] mergeShares a b = a ++ b addTask :: MTaskTask MTaskDevice -> MTaskDevice addTask task device = {device & deviceTasks=[task:device.deviceTasks]}