-syncNetworkChannel :: String Int String (String -> m) (m -> String) (Shared ([m],Bool,[m],Bool)) -> Task () | iTask m
-syncNetworkChannel server port msgSeparator decodeFun encodeFun channel
- = tcpconnect server port channel {ConnectionHandlers|onConnect=onConnect,whileConnected=whileConnected,onDisconnect=onDisconnect} @! ()
- where
- onConnect _ (received,receiveStopped,send,sendStopped)
- = (Ok "",if (not (isEmpty send)) (Just (received,False,[],sendStopped)) Nothing, map encodeFun send,False)
- whileConnected Nothing acc (received,receiveStopped,send,sendStopped)
- = (Ok acc, Nothing, [], False)
- whileConnected (Just newData) acc (received,receiveStopped,send,sendStopped)
- # [acc:msgs] = reverse (split msgSeparator (concat [acc,newData]))
- # write = if (not (isEmpty msgs && isEmpty send))
- (Just (received ++ map decodeFun (reverse msgs),receiveStopped,[],sendStopped))
- Nothing
- = (Ok acc,write,map encodeFun send,False)
-
- onDisconnect l (received,receiveStopped,send,sendStopped)
- = (Ok l,Just (received,True,send,sendStopped))
-
-consumeNetworkStream :: ([m] -> Task ()) (Shared ([m],Bool,[m],Bool)) -> Task () | iTask m
-consumeNetworkStream processTask channel
- = ((watch channel >>* [OnValue (ifValue ifProcess process)]) <! id) @! ()
+from Data.Func import $
+import Data.Tuple
+import Data.List
+import System.Directory
+
+import iTasks._Framework.Store
+import iTasks._Framework.Serialization
+
+import TTY, iTasksTTY
+
+derive class iTask UserLED
+
+Start :: *World -> *World
+Start world = startEngine (mTaskManager
+ >>* [OnAction (Action "Shutdown") (always $ shutDown)]) world
+
+mTaskManager :: Task ()
+mTaskManager = startupDevices >>| anyTask
+ [ viewmTasks @! ()
+ , whileUnchanged sdsStore manageShares
+ , whileUnchanged deviceStore $ manageDevices process
+ ] <<@ ApplyLayout (sequenceLayouts
+ [ arrangeWithSideBar 0 LeftSide 260 True
+ , arrangeSplit Vertical True
+ ])