9bd56126d40de228dd6863dfd121db21b30ec112
[mTask.git] / Tasks / mTaskTask.icl
1 implementation module Tasks.mTaskTask
2
3 import mTask
4 import iTasks
5 import Devices.mTaskDevice
6
7 import iTasks._Framework.Serialization
8
9 derive class iTask MTaskTask, MTaskInterval, Main, ByteCode, Stmt, Expr, BC, BCState, RWST, Identity
10
11 makeTask :: String Int -> Task MTaskTask
12 makeTask name ident = get currentDateTime
13 @ \dt->{MTaskTask | name=name,ident=ident,dateAdded=dt}
14
15 sendTaskToDevice :: String (Main (ByteCode a Stmt)) (MTaskDevice, MTaskInterval) -> Task ()
16 sendTaskToDevice wta mTask (device, timeout) =
17 get bcStateStore @ toMessages timeout mTask
18 >>= \(msgs, st1)->set st1 bcStateStore
19 >>| toSDSRecords msgs st1 device
20 >>= \sdss->upd (mergeShares sdss) sdsStore
21 >>| sendMessages msgs device
22 >>| makeTask wta -1
23 >>= withDevices device o addTask
24 @! ()
25 where
26 sharename i = device.deviceChannels +++ "-" +++ toString i
27
28 toSDSRecords :: [MTaskMSGSend] BCState MTaskDevice -> Task [MTaskShare]
29 toSDSRecords s st device = treturn
30 [makeShare wta device.deviceName sdsi sdsval
31 \\{sdsi,sdspub,sdsval}<-st.sdss
32 , (MTSds sdsi` _)<-s
33 | sdsi == sdsi`]
34
35 mergeShares a b = a ++ b
36
37 addTask :: MTaskTask MTaskDevice -> MTaskDevice
38 addTask task device = {device & deviceTasks=[task:device.deviceTasks]}