send device move to task
[mTask.git] / Tasks / mTaskTask.icl
index 1cd45f8..3e209da 100644 (file)
@@ -2,6 +2,8 @@ implementation module Tasks.mTaskTask
 
 import mTask
 import iTasks
+import Devices.mTaskDevice
+
 
 import iTasks._Framework.Serialization
 
@@ -10,3 +12,28 @@ derive class iTask MTaskTask, MTaskInterval, Main, ByteCode, Stmt, Expr, BC, BCS
 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
+       >>= \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 -> Task [MTaskShare]
+               toSDSRecords s st = sequence ""
+                       [makeShare wta 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]}