Skip to content

@mmakowski /Remoting.hs
Created

Embed URL

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
cfgRole MASTER
cfgHostName localhost
{-
One process starts the master process
Other start do-nothing process
master distributes the work among the other processes
-}
module Main where
import Remote
import Control.Monad
main :: IO ()
main = remoteInit (Just "config") [] initialProcess
{-
the argument defines the role. All nodes run from the same executable, the config defines which
role the node should assume and then this function branches off depending on the role.
-}
initialProcess :: String -> ProcessM ()
initialProcess "MASTER" = masterProcess
initialProcess "SLAVE" = slaveProcess
initialProcess role = error $ "Unknown role " ++ role
masterProcess :: ProcessM ()
masterProcess = do
peers <- getPeers
let slaves = findPeerByRole peers "SLAVE"
myPid <- getSelfPid
forM_ slaves (receiveMessage myPid)
receiveMessage :: ProcessId -> NodeId -> ProcessM ()
receiveMessage myPid node = do
Just pid <- nameQuery node "main"
send pid myPid
msg <- expect
say $ "message: " ++ msg
slaveProcess :: ProcessM ()
slaveProcess = do
nameSet "main"
pid <- expect
send pid "PONG"
@mmakowski
Owner

To run the master/slave version:

mkdir slave
cat config | sed s/MASTER/SLAVE/ > slave/config
ghc --make Remoting.hs -o remoting
cd slave
../remoting &
cd ..
./remoting
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Something went wrong with that request. Please try again.