081848e329fb4d382e43ac32b6f1e490fa6ad660
[clean-tests.git] / cloudiTasks / cloudiTasks.icl
1 module cloudiTasks
2
3 import StdEnv
4 import iTasks
5 import Data.Func
6 import iTasks.Extensions.Distributed
7
8 Start w = flip doTasksWithOptions w \args eo
9 # (eo, s) = case args of
10 [argv0,"--slave",p] = ({eo & sdsPort=toInt p}, onStartup o slave)
11 _ = (eo, onRequest "/" o master)
12 = Ok (s args, {eo & distributed=True})
13
14 slave :: [String] -> Task ()
15 slave args
16 = get applicationOptions
17 >>- \eo->traceValue ("Slave started on port " +++ toString eo.sdsPort)
18 >-| asyncTaskListener
19
20 master :: [String] -> Task ()
21 master args
22 = get applicationOptions
23 >>- \eo->traceValue ("Master started on port " +++ toString eo.serverPort)
24 >-| asyncTask (PrivateNode 9099 ["--slave", "9099"]) (blockWait 5)
25 // >-| asyncTask (ExistingNode "localhost" 9099) (blockWait 5)
26 >>! \s->viewInformation [] s
27 @! ()
28
29 blockWait :: Int -> Task Int
30 blockWait i = accWorld (sleep i)
31 where
32 sleep :: !Int !*e -> (!Int, !*e)
33 sleep _ _ = code {
34 ccall sleep "I:I:A"
35 }