revive updateStateC
authorJoachim Breitner <mail@joachim-breitner.de>
Sat, 5 Jul 2008 11:55:03 +0000 (11:55 +0000)
committerJoachim Breitner <mail@joachim-breitner.de>
Sat, 5 Jul 2008 11:55:03 +0000 (11:55 +0000)
Partty.hs

index 12d350c..25a24ae 100644 (file)
--- a/Partty.hs
+++ b/Partty.hs
@@ -187,12 +187,14 @@ callNightCallback ncb ps d e = do
 runner :: Handle -> DayCallback d -> NightCallback d -> ParttyState -> d -> IO ()
 runner h dcb ncb = fix $ \loop ps d -> do
        (e,ps') <- getNextUserMessage h ps
-       d' <- case e of
+       (d',ps'') <- case e of
                Left dm  -> do (client_messages, d') <- callDayCallback dcb ps' d dm
                               mapM_ (sendClientMessage h) client_messages
-                              return d'
-               Right nm -> do callNightCallback ncb ps' d nm
-       loop ps' d'
+                              let ps'' = foldr updateStateC ps' client_messages
+                              return (d',ps'')
+               Right nm -> do d' <- callNightCallback ncb ps' d nm
+                              return (d',ps')
+       loop ps'' d'
 
 getNextUserMessage :: Handle -> ParttyState -> IO (Either DayMessage NightMessage, ParttyState)
 getNextUserMessage h ps = do
@@ -334,6 +336,10 @@ updateState (InternalMessage (MyIdIs myId)) ps =
 
 updateState msg ps = ps -- TODO: this is a stub
 
+updateStateC :: ClientMessage -> ParttyState -> ParttyState
+updateStateC (Goto place) ps = ps {psPlace = place}
+updateStateC msg ps = ps
+
 -- Convenience functions for accessing the state
 
 whoIsHere :: (MonadReader ParttyState m) => m [Player]