-consumeNetworkStream :: ([m] -> Task ()) (Shared ([m],Bool,[m],Bool)) -> Task () | iTask m
-consumeNetworkStream processTask channel
- = ((watch channel >>* [OnValue (ifValue ifProcess process)]) <! id) @! ()
- where
- ifProcess (received,receiveStopped,_,_)
- = receiveStopped || (not (isEmpty received))
+ viewmTasks = listmTasks
+ >&^ \sh->whileUnchanged sh $ \mi->forever (case mi of
+ Nothing = viewInformation "No task selected" [] ()
+ Just mTaskTask = get deviceStore
+ >>= \devices->case devices of
+ [] = viewInformation "No devices yet" [] ()
+ ds = sendmTask mTaskTask ds @! ())
+ where
+ listmTasks :: Task String
+ listmTasks = enterChoiceWithShared "Available mTasks" [ChooseFromList id] mTaskTaskStore
+
+ sendmTask mTaskId ds = fromJust ('DM'.get mTaskId allmTasks)
+// >>= \bc->(enterChoice "Choose Device" [ChooseFromDropdown \t->t.deviceName] ds
+// -&&- enterInformation "Timeout, 0 for one-shot" [])
+// >>* [OnAction (Action "Send") (withValue $ Just o sendToDevice bc)]
+
+ process :: MTaskDevice (Shared Channels) -> Task ()
+ process device ch = forever (watch ch >>* [OnValue (
+ ifValue (not o isEmpty o fst3)
+ (\t->upd (appFst3 (const [])) ch >>| proc (fst3 t)))])
+ where
+ proc :: [MTaskMSGRecv] -> Task ()
+ proc [] = treturn ()
+ proc [m:ms] = (case m of
+// MTSDSAck i = traceValue (toString m) @! ()
+// MTSDSDelAck i = traceValue (toString m) @! ()
+ MTPub i val = getSDSRecord i >>= set (toInt val.[0]*256 + toInt val.[1]) o getSDSStore @! ()
+ MTTaskAck i = deviceTaskAcked device i
+ MTTaskDelAck i = deviceTaskDeleteAcked device i @! ()
+ MTEmpty = treturn ()
+ _ = traceValue (toString m) @! ()
+ ) >>| proc ms