module cloudiTasks import Data.Func, Data.Functor, Data.Tuple import StdEnv import iTasks Start w = doTasks master w master :: Task () master = get applicationOptions >>- \eo->traceValue ("Master started on port " +++ toString eo.serverPort) // >-| set 42 (remoteShare (sharedStore "bork" 42) {domain="localhost",port=9099}) // >-| asyncTask (ExistingNode "localhost" 9099) (blockWait 5) // >-| asyncTask "localhost" 9090 (blockWait 5) // >-| asyncTask (PrivateNode 9099) (traceValue 5 >-| traceValue 42) >-| asyncTask "localhost" 9099 (updateInformation [] 5) // >-| sleepSortPar [5,1,3,8] >&^ viewSharedInformation [] @! () blockWait :: Int -> Task Int blockWait i = accWorld (sleep i) where sleep :: !Int !*e -> (!Int, !*e) sleep _ _ = code { ccall sleep "I:I:A" } sleepSortPar :: [Int] -> Task [Int] sleepSortPar numbers = parallel [ (Embedded, \stl-> asyncTaskSpawn port (blockWait num) >-| appendTask Embedded (\_->return num) stl @? const NoValue) \\ num <- numbers & port <- [9092..9099] ] [] @? \tv->case tv of NoValue = NoValue (Value ts _) # r = [v\\(_, Value v True)<-ts] = Value r (length r == length numbers)