@@ -0,0 +1,32 @@
1+{-# LANGUAGE BangPatterns, TemplateHaskell #-}
4+import Control.Applicative
5+import Control.Monad.IO.Class (liftIO)
6+import qualified Data.ByteString.Lazy as BSL
7+import Data.Binary (encode, decode)
10+pingServer :: ProcessM ()
11+pingServer = forever $ do
15+pingClient :: Int -> ProcessId -> ProcessM ()
16+pingClient n them = do
18+ replicateM_ n $ send them us >> (expect :: ProcessM ())
19+ liftIO . putStrLn $ "Did " ++ show n ++ " pings"
21+initialProcess :: String -> ProcessM ()
22+initialProcess "SERVER" = do
24+ liftIO $ BSL.writeFile "pingServer.pid" (encode us)
26+initialProcess "CLIENT" = do
27+ n <- liftIO $ getLine
28+ them <- liftIO $ decode <$> BSL.readFile "pingServer.pid"
29+ pingClient (read n) them
32+main = remoteInit (Just "config") [] initialProcess