Parsing all events, making parser errors fatal
authorJoachim Breitner <mail@joachim-breitner.de>
Fri, 4 Jul 2008 23:55:38 +0000 (23:55 +0000)
committerJoachim Breitner <mail@joachim-breitner.de>
Fri, 4 Jul 2008 23:55:38 +0000 (23:55 +0000)
Partty.hs

index 28ff1a5..3406d5e 100644 (file)
--- a/Partty.hs
+++ b/Partty.hs
@@ -38,6 +38,7 @@ data IncomingMessage = InternalMessage InternalMessage
 data DayMessage      = DayStarts
                      | DayEndsIn Int
                      | DayEnds
+                    | GotHint Player Hint
                     deriving (Show, Eq)
 
 -- Events that we want to send to the user code and that
@@ -49,12 +50,16 @@ data NightMessage    = Initialize
                     | NightEndsIn Int
                     | NightEnds
                      | GotScore Score
+                    | NewContact Player
+                    | LostContact Player
                     deriving (Show, Eq)
 -- Pure bookkeeping events
 data InternalMessage = MyPlayerId Player
                      | Welcome
                     | PlayerJoined String
+                    | PlayerLeft String
                     | GameStarting
+                    | GameEnds
                     | MyIdIs Player
                     | PlayerEnter Player Place
                     | PlayerLeave Player Place
@@ -63,29 +68,6 @@ data InternalMessage = MyPlayerId Player
                     deriving (Show, Eq)
 
 
-{- Einzusortieren:
-                    | PlayerJoined Player  -- the game
-                    | PlayerLeft Player
-                    | PlayerEnters Player Place
-                    | PlayerLeaves Player Place
-                    | GotHint Hint
-                    | PlayerList [Player]
-                    | PlayerScore [(Player, Int)]
-                    | PlayerNames [(Player, String)]
-                    | GameStarted
-                    | DayStarts
-                    | DayEndsIn Int
-                    | DayEnds
-                    | NightStarts
-                    | NightEndsIn Int
-                    | NightEnds
-                    | GameEnded
-                    | PartyHint Place
-                    | PlayerPosition Player Place -- wann bekommt man das?
-                    | ActionsLeft Int
-                    | NewContact Player
--} 
-
 data ClientMessage = Tell Player Hint
                   | Goto Place
                     deriving (Show, Eq)
@@ -208,10 +190,12 @@ parseIncomingMessage msg = case id of
        -- Regular Messages
        71 -> InternalMessage (Welcome)
        20 -> InternalMessage (PlayerJoined s1)
+       21 -> InternalMessage (PlayerLeft s1)
        70 -> InternalMessage (Noise) -- welcome
        40 -> InternalMessage (Noise) -- waiting for at least .. players
        41 -> InternalMessage (Noise) -- game will start in...
        42 -> InternalMessage (GameStarting)
+       56 -> InternalMessage (GameEnds)
        43 -> InternalMessage (MyIdIs s1)
        22 -> InternalMessage (PlayerEnter s1 int2)
        23 -> InternalMessage (PlayerLeave s1 int2)
@@ -220,6 +204,10 @@ parseIncomingMessage msg = case id of
        50 -> DayMessage      (DayStarts)
        51 -> DayMessage      (DayEndsIn int1)
        52 -> DayMessage      (DayEnds)
+       24 -> DayMessage      (if int2 == 0 then GotHint s1 (NoPartyAt int3)
+                                           else GotHint s1 (PartyAt   int3) )
+       25 -> DayMessage      (if int2 == 0 then GotHint s1 (Liar      s3)
+                                           else GotHint s1 (NoLiar    s3) )
 
        53 -> NightMessage    (NightStarts)
        54 -> NightMessage    (NightEndsIn int1)
@@ -229,19 +217,24 @@ parseIncomingMessage msg = case id of
        62 -> NightMessage    (GotScore NoScore)
        63 -> NightMessage    (GotScore ToFew)
        64 -> NightMessage    (GotScore Scored)
+       66 -> NightMessage    (NewContact s1)
+       67 -> NightMessage    (LostContact s1)
 
        60 -> NightMessage    (PartyHint int1)
 
        
-       _  -> UnknownMessage msg
-       --_  -> error $ "Unkown or unparseable message:\n" ++ msg
+       --_  -> UnknownMessage msg
+       _  -> error $ "Unkown or unparseable message:\n" ++ msg
  where (id_s : num_params : rest) = words msg
        id = read id_s
        param_s = take (read num_params) rest
+       -- This works thanks to laziness:
        s1   = read (param_s !! 0) :: String
        int1 = read (param_s !! 0) :: Int
        s2   = read (param_s !! 1) :: String
        int2 = read (param_s !! 1) :: Int
+       s3   = read (param_s !! 2) :: String
+       int3 = read (param_s !! 2) :: Int
 
 sendClientMessage :: Handle -> ClientMessage -> IO ()
 sendClientMessage h msg = do putStrLn $ "Client says: " ++ (show msg)