netserver/Miscutils.hs
changeset 1317 13cf8c5a7428
parent 1304 05cebf68ebd8
child 1321 d7dc4e86201e
equal deleted inserted replaced
1316:50514e45d0b5 1317:13cf8c5a7428
     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