5 import Data.Word |
5 import Data.Word |
6 import Miscutils |
6 import Miscutils |
7 import Maybe (fromMaybe, fromJust) |
7 import Maybe (fromMaybe, fromJust) |
8 |
8 |
9 answerBadCmd = [(clientOnly, ["ERROR", "Bad command, state or incorrect parameter"])] |
9 answerBadCmd = [(clientOnly, ["ERROR", "Bad command, state or incorrect parameter"])] |
10 answerQuit = [(clientOnly, ["BYE"])] |
10 answerQuit = [(clientOnly, ["off"])] |
11 answerAbandoned = [(sameRoom, ["BYE"])] |
11 answerAbandoned = [(sameRoom, ["BYE"])] |
12 answerQuitInform nick = [(othersInRoom, ["QUIT", nick])] |
12 answerQuitInform nick = [(othersInRoom, ["LEFT", nick])] |
13 answerNickChosen = [(clientOnly, ["ERROR", "The nick already chosen"])] |
13 answerNickChosen = [(clientOnly, ["ERROR", "The nick already chosen"])] |
14 answerNickChooseAnother = [(clientOnly, ["WARNING", "Choose another nick"])] |
14 answerNickChooseAnother = [(clientOnly, ["WARNING", "Choose another nick"])] |
15 answerNick nick = [(clientOnly, ["NICK", nick])] |
15 answerNick nick = [(clientOnly, ["NICK", nick])] |
16 answerProtocolKnown = [(clientOnly, ["ERROR", "Protocol number already known"])] |
16 answerProtocolKnown = [(clientOnly, ["ERROR", "Protocol number already known"])] |
17 answerBadInput = [(clientOnly, ["ERROR", "Bad input"])] |
17 answerBadInput = [(clientOnly, ["ERROR", "Bad input"])] |
30 if null (room client) then |
30 if null (room client) then |
31 (noChangeClients, noChangeRooms, answerQuit) |
31 (noChangeClients, noChangeRooms, answerQuit) |
32 else if isMaster client then |
32 else if isMaster client then |
33 (noChangeClients, removeRoom (room client), answerAbandoned) -- core disconnects clients on ROOMABANDONED answer |
33 (noChangeClients, removeRoom (room client), answerAbandoned) -- core disconnects clients on ROOMABANDONED answer |
34 else |
34 else |
35 (noChangeClients, noChangeRooms, answerQuitInform $ nick client) |
35 (noChangeClients, noChangeRooms, answerQuit ++ (answerQuitInform $ nick client)) |
36 |
36 |
37 |
37 |
38 -- check state and call state-dependent commmand handlers |
38 -- check state and call state-dependent commmand handlers |
39 handleCmd client clients rooms cmd = |
39 handleCmd client clients rooms cmd = |
40 if null (nick client) || protocol client == 0 then |
40 if null (nick client) || protocol client == 0 then |