X-Git-Url: https://git.martlubbers.net/?a=blobdiff_plain;f=Tasks%2FmTaskTask.icl;h=845c07724610f11840b731cad199f89b4f84b77b;hb=09b207a39b7791098daafd7d87c3ad9d3db3e19f;hp=9cc5a9811bfca2f29e097b76946288656d6b6fc6;hpb=28f4e19f893889e6d19d8c0653a643ae1580fd6d;p=mTask.git diff --git a/Tasks/mTaskTask.icl b/Tasks/mTaskTask.icl index 9cc5a98..845c077 100644 --- a/Tasks/mTaskTask.icl +++ b/Tasks/mTaskTask.icl @@ -2,11 +2,38 @@ 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, UserLED, RWST, Identity +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]}