}
data Score = NoScore | ToFew | Scored
+ deriving (Show, Eq)
data IncomingMessage = InternalMessage InternalMessage
| DayMessage DayMessage
-- Events that we want to send to the user code and that
-- can be reacted upon
data DayMessage = DayStarts
+ | DayEndsIn Int
+ | DayEnds
+ | PlayerAt Player Place
deriving (Show, Eq)
+
-- Events that we want to send to the user code and that
-- can NOT be reacted upon
data NightMessage = Initialize
| PartyHint Place
+ | NightStarts
+ | NightEndsIn Int
+ | NightEnds
+ | GotScore Score
deriving (Show, Eq)
-- Pure bookkeeping events
data InternalMessage = MyPlayerId Player
| GameStarting
| MyIdIs Player
| PlayerEnter Player Place
+ | PlayerLeave Player Place
+ | ActionsLeft Int
| Noise
deriving (Show, Eq)
| GameEnded
| PartyHint Place
| PlayerPosition Player Place -- wann bekommt man das?
- | GotScore Score
| ActionsLeft Int
| NewContact Player
-}
InternalMessage (MyIdIs myId) <- parseIncomingMessage `liftM` hGetLine h
InternalMessage (PlayerEnter player startPlace) <- parseIncomingMessage `liftM` hGetLine h
when (player /= myId) $ error "Server did not tell us where we start"
+ putStrLn $ "Starting at " ++ show startPlace
let initialState = ParttyState
{ psMyName = myId
42 -> InternalMessage (GameStarting)
43 -> InternalMessage (MyIdIs s1)
22 -> InternalMessage (PlayerEnter s1 int2)
+ 23 -> InternalMessage (PlayerLeave s1 int2)
+ 65 -> InternalMessage (ActionsLeft int1)
50 -> DayMessage (DayStarts)
+ 51 -> DayMessage (DayEndsIn int1)
+ 52 -> DayMessage (DayEnds)
+ 61 -> DayMessage (PlayerAt s1 int2)
+
+ 53 -> NightMessage (NightStarts)
+ 54 -> NightMessage (NightEndsIn int1)
+ 55 -> NightMessage (NightEnds)
+ 62 -> NightMessage (GotScore NoScore)
+ 63 -> NightMessage (GotScore ToFew)
+ 64 -> NightMessage (GotScore Scored)
60 -> NightMessage (PartyHint int1)
+
_ -> UnknownMessage msg
--_ -> error $ "Unkown or unparseable message:\n" ++ msg
param_s = take (read num_params) rest
s1 = read (param_s !! 0) :: String
int1 = read (param_s !! 0) :: Int
- s2 = read (param_s !! 2) :: String
- int2 = read (param_s !! 2) :: Int
+ s2 = read (param_s !! 1) :: String
+ int2 = read (param_s !! 1) :: Int
sendClientMessage :: Handle -> ClientMessage -> IO ()
sendClientMessage h msg = do putStrLn $ "Client says: " ++ (show msg)