import System.Environment (getArgs, getProgName)
import Control.Distributed.Process (NodeId, Process, liftIO)
import Control.Distributed.Process.Node (initRemoteTable)
import Control.Distributed.Process.Backend.SimpleLocalnet
master :: Backend -> [NodeId] -> Process ()
master backend slaves = do
liftIO . putStrLn $ "Slaves: " ++ show slaves
terminateAllSlaves backend
main :: IO ()
main = do
prog <- getProgName
args <- getArgs
case args of
["master", host, port] -> do
backend <- initializeBackend host port initRemoteTable
startMaster backend (master backend)
["slave", host, port] -> do
backend <- initializeBackend host port initRemoteTable
startSlave backend
_ ->
putStrLn $ "usage: " ++ prog ++ " (master | slave) host port"