19 makeAnswer func msg = [\_ -> (func, msg)] |
19 makeAnswer func msg = [\_ -> (func, msg)] |
20 answerClientOnly, answerOthersRoom, answerSameRoom :: [String] -> [Answer] |
20 answerClientOnly, answerOthersRoom, answerSameRoom :: [String] -> [Answer] |
21 answerClientOnly = makeAnswer clientOnly |
21 answerClientOnly = makeAnswer clientOnly |
22 answerOthersRoom = makeAnswer othersInRoom |
22 answerOthersRoom = makeAnswer othersInRoom |
23 answerSameRoom = makeAnswer sameRoom |
23 answerSameRoom = makeAnswer sameRoom |
|
24 answerAll = makeAnswer allClients |
24 |
25 |
25 answerBadCmd = answerClientOnly ["ERROR", "Bad command, state or incorrect parameter"] |
26 answerBadCmd = answerClientOnly ["ERROR", "Bad command, state or incorrect parameter"] |
26 answerNotMaster = answerClientOnly ["ERROR", "You cannot configure room parameters"] |
27 answerNotMaster = answerClientOnly ["ERROR", "You cannot configure room parameters"] |
27 answerBadParam = answerClientOnly ["ERROR", "Bad parameter"] |
28 answerBadParam = answerClientOnly ["ERROR", "Bad parameter"] |
28 answerErrorMsg msg = answerClientOnly ["ERROR", msg] |
29 answerErrorMsg msg = answerClientOnly ["ERROR", msg] |
58 answerOthersRoom ["LEFT", nick, msg] |
59 answerOthersRoom ["LEFT", nick, msg] |
59 else |
60 else |
60 answerOthersRoom ["LEFT", nick] |
61 answerOthersRoom ["LEFT", nick] |
61 answerQuitLobby nick msg = |
62 answerQuitLobby nick msg = |
62 if not $ null msg then |
63 if not $ null msg then |
63 answerOthersRoom ["LOBBY:LEFT", nick, msg] |
64 answerAll ["LOBBY:LEFT", nick, msg] |
64 else |
65 else |
65 answerOthersRoom ["LOBBY:LEFT", nick] |
66 answerAll ["LOBBY:LEFT", nick] |
66 |
67 |
67 answerJoined nick = answerSameRoom ["JOINED", nick] |
68 answerJoined nick = answerSameRoom ["JOINED", nick] |
68 answerRunGame = answerSameRoom ["RUN_GAME"] |
69 answerRunGame = answerSameRoom ["RUN_GAME"] |
69 answerIsReady nick = answerSameRoom ["READY", nick] |
70 answerIsReady nick = answerSameRoom ["READY", nick] |
70 answerNotReady nick = answerSameRoom ["NOT_READY", nick] |
71 answerNotReady nick = answerSameRoom ["NOT_READY", nick] |
99 "" |
100 "" |
100 nicks = filter (not . null) $ map nick clients |
101 nicks = filter (not . null) $ map nick clients |
101 |
102 |
102 answerPing = makeAnswer allClients ["PING"] |
103 answerPing = makeAnswer allClients ["PING"] |
103 |
104 |
104 |
|
105 -- Main state-independent cmd handler |
105 -- Main state-independent cmd handler |
106 handleCmd :: CmdHandler |
106 handleCmd :: CmdHandler |
107 handleCmd client _ rooms ("QUIT" : xs) = |
107 handleCmd client _ rooms ("QUIT" : xs) = |
108 if null (room client) then |
108 if null (room client) then |
109 (noChangeClients, noChangeRooms, answerQuit msg ++ (answerQuitLobby (nick client) msg) ) |
109 (noChangeClients, noChangeRooms, answerQuit msg ++ (answerQuitLobby (nick client) msg) ) |