update memory consumption on task acknowledgement
[mTask.git] / miTask.icl
1 module miTask
2
3 import StdDebug, StdMisc
4 from StdFunc import flip
5
6 import iTasks
7 import mTask
8 import Devices.mTaskDevice
9 import Shares.mTaskShare
10 import Tasks.Examples
11 import Utils.SDS
12
13 from Text import class Text(startsWith,concat,split,join), instance Text String
14
15 import qualified Data.Map as DM
16
17 from Data.Func import $
18 import Data.Tuple
19 import Data.List
20 import System.Directory
21
22 import iTasks._Framework.Store
23 import iTasks._Framework.Serialization
24
25 import TTY, iTasksTTY
26
27 Start world = startEngine [
28 publish "/manage" $ const $ mTaskManager
29 >>* [OnAction (Action "Shutdown") (always $ shutDown)],
30 publish "/" $ const demo
31 ] world
32
33 demo = viewInformation "" [] "Hello world"
34
35 mTaskManager :: Task ()
36 mTaskManager = startupDevices >>| anyTask
37 [ viewmTasks @! ()
38 , whileUnchanged sdsStore manageShares
39 , whileUnchanged deviceStore $ manageDevices process
40 ] <<@ ApplyLayout (sequenceLayouts
41 [arrangeWithSideBar 0 LeftSide 260 True
42 ,arrangeSplit Vertical True])
43 where
44 viewmTasks :: Task String
45 viewmTasks = enterChoiceWithShared "Available mTasks" [ChooseFromList id] mTaskTaskStore
46 >&^ \sh->whileUnchanged sh $ \mi->forever (case mi of
47 Nothing = viewInformation "No task selected" [] ()
48 Just mTaskTask = get deviceStore
49 >>= \devices->case devices of
50 [] = viewInformation "No devices yet" [] ()
51 ds = fromJust ('DM'.get mTaskTask allmTasks)
52 >>= \bc->(enterChoice "Choose Device" [ChooseFromDropdown \t->t.deviceName] ds
53 -&&- enterInformation "Timeout" []
54 ) >>* [OnAction (Action "Send") (withValue $ Just o sendTaskToDevice mTaskTask bc)]
55 @! ()
56 )
57
58 process :: MTaskDevice (Shared Channels) -> Task ()
59 process device ch = forever (watch ch >>* [OnValue (
60 ifValue (not o isEmpty o fst3)
61 (\t->upd (appFst3 (const [])) ch >>| proc (fst3 t)))])
62 where
63 proc :: [MTaskMSGRecv] -> Task ()
64 proc [] = treturn ()
65 proc [MTEmpty:ms] = proc ms
66 proc [m:ms] = traceValue (toString m) >>| (case m of
67 // MTSDSAck i = traceValue (toString m) @! ()
68 // MTSDSDelAck i = traceValue (toString m) @! ()
69 MTPub i val = updateShare i val
70 MTTaskAck i mem = deviceTaskAcked device i mem
71 MTTaskDelAck i = deviceTaskDeleteAcked device i @! ()
72 MTDevSpec s = deviceAddSpec device s @! ()
73 _ = treturn ()
74 ) >>| proc ms