1 implementation module Tasks.mTaskTask
5 import Devices.mTaskDevice
7 import iTasks._Framework.Serialization
9 derive class iTask MTaskTask, MTaskInterval, Main, ByteCode, Stmt, Expr, BC, BCState, RWST, Identity
11 makeTask :: String Int -> Task MTaskTask
12 makeTask name ident = get currentDateTime
13 @ \dt->{MTaskTask | name=name,ident=ident,dateAdded=dt}
15 sendTaskToDevice :: String (Main (ByteCode a Stmt)) (MTaskDevice, MTaskInterval) -> Task ()
16 sendTaskToDevice wta mTask (device, timeout)
17 # (msgs, newState) = toMessages timeout mTask device.deviceState
18 = toSDSRecords msgs newState device
19 >>= \sdss->updateShares device ((++) sdss)
20 >>| sendMessages msgs device
22 >>= withDevices device o addTaskUpState newState
25 sharename i = device.deviceChannels +++ "-" +++ toString i
27 toSDSRecords :: [MTaskMSGSend] BCState MTaskDevice -> Task [MTaskShare]
28 toSDSRecords s st device = treturn
29 [makeShare wta sdsi sdsval
30 \\{sdsi,sdsval}<-st.sdss, (MTSds sdsi` _)<-s | sdsi == sdsi`]
32 addTaskUpState :: BCState MTaskTask MTaskDevice -> MTaskDevice
33 addTaskUpState st task device =
37 , deviceTasks=[task:device.deviceTasks]}