equal
deleted
inserted
replaced
4 import Control.Concurrent.STM |
4 import Control.Concurrent.STM |
5 import Data.Word |
5 import Data.Word |
6 import Data.Char |
6 import Data.Char |
7 import Data.List |
7 import Data.List |
8 import Maybe (fromJust) |
8 import Maybe (fromJust) |
9 |
9 import qualified Data.Map as Map |
10 |
10 |
11 data ClientInfo = |
11 data ClientInfo = |
12 ClientInfo |
12 ClientInfo |
13 { |
13 { |
14 chan :: TChan [String], |
14 chan :: TChan [String], |
20 } |
20 } |
21 |
21 |
22 instance Eq ClientInfo where |
22 instance Eq ClientInfo where |
23 a1 == a2 = handle a1 == handle a2 |
23 a1 == a2 = handle a1 == handle a2 |
24 |
24 |
|
25 data HedgehogInfo = |
|
26 HedgehogInfo String String |
|
27 |
25 data TeamInfo = |
28 data TeamInfo = |
26 TeamInfo |
29 TeamInfo |
27 { |
30 { |
28 teamname :: String |
31 teamname :: String, |
|
32 hedgehogs :: [HedgehogInfo] |
29 } |
33 } |
30 |
34 |
31 data RoomInfo = |
35 data RoomInfo = |
32 RoomInfo |
36 RoomInfo |
33 { |
37 { |
34 name :: String, |
38 name :: String, |
35 password :: String, |
39 password :: String, |
36 teams :: [TeamInfo] |
40 roomProto :: Word16, |
|
41 teams :: [TeamInfo], |
|
42 params :: Map.Map String [String] |
37 } |
43 } |
38 |
44 |
39 type ClientsTransform = [ClientInfo] -> [ClientInfo] |
45 type ClientsTransform = [ClientInfo] -> [ClientInfo] |
40 type RoomsTransform = [RoomInfo] -> [RoomInfo] |
46 type RoomsTransform = [RoomInfo] -> [RoomInfo] |
41 type HandlesSelector = ClientInfo -> [ClientInfo] -> [RoomInfo] -> [Handle] |
47 type HandlesSelector = ClientInfo -> [ClientInfo] -> [RoomInfo] -> [Handle] |
88 addRoom :: RoomInfo -> RoomsTransform |
94 addRoom :: RoomInfo -> RoomsTransform |
89 addRoom room rooms = room:rooms |
95 addRoom room rooms = room:rooms |
90 |
96 |
91 removeRoom :: String -> RoomsTransform |
97 removeRoom :: String -> RoomsTransform |
92 removeRoom roomname rooms = filter (\rm -> roomname /= name rm) rooms |
98 removeRoom roomname rooms = filter (\rm -> roomname /= name rm) rooms |
|
99 |
|
100 changeRoomConfig :: String -> String -> [String] -> RoomsTransform |
|
101 changeRoomConfig _ _ _ [] = error "changeRoomConfig: no such room" |
|
102 changeRoomConfig roomName paramName paramStrs (room:rooms) = |
|
103 if roomName == name room then |
|
104 room{params = Map.insert paramName paramStrs (params room)} : rooms |
|
105 else |
|
106 room : changeRoomConfig roomName paramName paramStrs rooms |