module cloudiTasks import StdEnv import iTasks import Data.Func import iTasks.Extensions.Distributed Start w = flip doTasksWithOptions w \args eo # (eo, s) = case args of [argv0,"--slave",p] = ({eo & sdsPort=toInt p}, onStartup o slave) _ = (eo, onRequest "/" o master) = Ok (s args, {eo & distributed=True}) slave :: [String] -> Task () slave args = get applicationOptions >>- \eo->traceValue ("Slave started on port " +++ toString eo.sdsPort) >-| asyncTaskListener master :: [String] -> Task () master args = get applicationOptions >>- \eo->traceValue ("Master started on port " +++ toString eo.serverPort) >-| asyncTask (PrivateNode 9099 ["--slave", "9099"]) (blockWait 5) // >-| asyncTask (ExistingNode "localhost" 9099) (blockWait 5) >>! \s->viewInformation [] s @! () blockWait :: Int -> Task Int blockWait i = accWorld (sleep i) where sleep :: !Int !*e -> (!Int, !*e) sleep _ _ = code { ccall sleep "I:I:A" }