54 lines
1.7 KiB
Haskell
54 lines
1.7 KiB
Haskell
module Main where
|
|
|
|
import Control.Monad
|
|
import Control.Monad.IO.Class
|
|
import System.Environment
|
|
import System.IO
|
|
import Transient.Base
|
|
import Transient.Indeterminism
|
|
import Transient.Logged
|
|
import Transient.Move
|
|
import Transient.Stream.Resource
|
|
import Control.Applicative
|
|
import System.Info
|
|
import Control.Concurrent
|
|
|
|
main = do
|
|
|
|
let nodes= [createNode "localhost" 2020, createNode "192.168.99.100" 2020]
|
|
args <- getArgs
|
|
let [localnode, remote]= if length args > 0 then nodes
|
|
else reverse nodes
|
|
|
|
|
|
runCloud' $ do
|
|
onAll $ addNodes nodes
|
|
listen localnode <|> return ()
|
|
hello <|> helloworld <|> stream localnode
|
|
|
|
hello= do
|
|
local $ option "hello" "each computer say hello"
|
|
|
|
r <- clustered $ do
|
|
node <- getMyNode
|
|
onAll . liftIO . print $ "hello " ++ os
|
|
return ("hello from",os,arch, nodeHost node)
|
|
|
|
lliftIO $ print r
|
|
|
|
helloworld= do
|
|
local $ option "helloword" "both computers compose \"hello world\""
|
|
r <- mclustered $ return $ if os== "linux" then "hello " else "world"
|
|
lliftIO $ print r
|
|
|
|
|
|
stream remoteHost= do
|
|
local $ option "stream" "stream from the Linux node to windows"
|
|
let fibs= 0 : 1 : zipWith (+) fibs (tail fibs) :: [Int] -- fibonacci numbers
|
|
|
|
r <- runAt remoteHost $ local $ do
|
|
r <- threads 1 $ choose $ take 10 fibs
|
|
liftIO $ putStr os >> print r
|
|
liftIO $ threadDelay 1000000
|
|
return r
|
|
lliftIO $ print r
|