{-# LANGUAGE TypeFamilies #-} import Data.Acid import Data.Acid.Centered import Control.Monad (when, replicateM_) import Control.Concurrent (threadDelay) import System.Exit (exitSuccess, exitFailure) import System.Directory (doesDirectoryExist, removeDirectoryRecursive) -- state structures import IntCommon -- helpers delaySec :: Int -> IO () delaySec n = threadDelay $ n*1000*1000 cleanup :: FilePath -> IO () cleanup path = do sp <- doesDirectoryExist path when sp $ removeDirectoryRecursive path -- actual test main :: IO () main = do cleanup "state/ConLoss/s1" acid <- enslaveStateFrom "state/ConLoss/s1" "localhost" 3333 (IntState 0) replicateM_ 20 $ do delaySec 1 --update acid IncrementState v <- query acid GetState putStrLn $ "Current state at Slave: " ++ show v closeAcidState acid