Differentiate between obFinished and obShutdown
authorJoachim Breitner <mail@joachim-breitner.de>
Thu, 25 Jun 2009 22:44:10 +0000 (00:44 +0200)
committerJoachim Breitner <mail@joachim-breitner.de>
Thu, 25 Jun 2009 22:44:10 +0000 (00:44 +0200)
src/Lseed/Data.hs
src/Lseed/Renderer/Cairo.hs
src/dbclient.hs

index 78b6a41..6924527 100644 (file)
@@ -83,7 +83,7 @@ data ScreenContent = ScreenContent
 
 -- | Main loop observers
 data Observer = Observer {
-       -- | Called once, before the main loop starts
+       -- | Called once per season, before the main loop starts
          obInit :: IO ()
        -- | Called once per tick, with the current tick number and the current
        -- state of the garden
@@ -93,8 +93,10 @@ data Observer = Observer {
        , obGrowingState :: (ClockTime -> ScreenContent) -> IO ()
        -- | Called before the main loop quits, with the last state of the garden
        , obFinished :: GrowingGarden -> IO ()
+       -- | Called once before program termination
+       , obShutdown :: IO ()
        }
-nullObserver = Observer (return ()) (\_ _ -> return ()) (\_ -> return ()) (\_ -> return ())
+nullObserver = Observer (return ()) (\_ _ -> return ()) (\_ -> return ()) (\_ -> return ()) (return ())
 
 -- | Methods to get the initial garden and the updated code when a plant multiplies
 data GardenSource = GardenSource {
@@ -195,6 +197,7 @@ instance Monoid Observer where
                obInit = obInit obs1 >> obInit obs2,
                obState = \d g -> obState obs1 d g >> obState obs2 d g,
                obGrowingState = \f -> obGrowingState obs1 f >> obGrowingState obs2 f,
-               obFinished = \g -> obFinished obs1 g >> obFinished obs2 g
+               obFinished = \g -> obFinished obs1 g >> obFinished obs2 g,
+               obShutdown = obShutdown obs1 >> obShutdown obs2
                }
        
index 1bd8676..bd52f9c 100644 (file)
@@ -81,8 +81,7 @@ cairoObserver = do
                { obGrowingState = \scGen -> do
                        writeIORef currentGardenRef scGen
                        widgetQueueDraw canvas
-               , obFinished = \_ ->
-                       mainQuit
+               , obShutdown = mainQuit
                }
 
 render :: Double -> AnnotatedGarden -> Render ()
index 2887235..db55d69 100644 (file)
@@ -42,12 +42,12 @@ scoringObs conf = nullObserver {
 main = do
        args <- getArgs
        case args of
-         [conf] -> forever $ do
+         [conf] -> do
                obs <- cairoObserver
-               lseedMainLoop True
+               forever $ lseedMainLoop True
                              (obs `mappend` scoringObs conf)
                              (GardenSource (getDBGarden conf) (getDBUpdate conf))
-                             200
+                             30
          _ -> do
                putStrLn "L-Seed DB client application."
                putStrLn "Please pass DB configuration file on the command line."