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