# HG changeset patch # User unc0rr # Date 1208633659 0 # Node ID f756a1d3324cd32ee61758bb46c617fe12898d09 # Parent 8ffa4ad0d8ea7bb6fc151baf13f1ec7ce6aac8a0 Handle the case when the room is already created by someone else diff -r 8ffa4ad0d8ea -r f756a1d3324c netserver/Miscutils.hs --- a/netserver/Miscutils.hs Sat Apr 19 19:29:58 2008 +0000 +++ b/netserver/Miscutils.hs Sat Apr 19 19:34:19 2008 +0000 @@ -42,12 +42,13 @@ ls <- readTVar state writeTVar state $ op ls -manipState2 :: TVar[ClientInfo] -> TVar[RoomInfo] -> ([ClientInfo] -> [RoomInfo] -> ([ClientInfo], [RoomInfo])) -> IO() +manipState2 :: TVar[ClientInfo] -> TVar[RoomInfo] -> ([ClientInfo] -> [RoomInfo] -> ([ClientInfo], [RoomInfo], Bool)) -> IO Bool manipState2 state1 state2 op = atomically $ do ls1 <- readTVar state1 ls2 <- readTVar state2 - let (ol1, ol2) = op ls1 ls2 + let (ol1, ol2, res) = op ls1 ls2 writeTVar state1 ol1 writeTVar state2 ol2 + return res diff -r 8ffa4ad0d8ea -r f756a1d3324c netserver/hwserv.hs --- a/netserver/hwserv.hs Sat Apr 19 19:29:58 2008 +0000 +++ b/netserver/hwserv.hs Sat Apr 19 19:34:19 2008 +0000 @@ -16,8 +16,8 @@ return () handleCmd clientHandle clientsList roomsList ("CREATE", [roomname]) = do - manipState2 clientsList roomsList (hcCreate) - sendMsg clientHandle ("JOINED " ++ roomname) + res <- manipState2 clientsList roomsList (hcCreate) + if res then sendMsg clientHandle ("JOINED " ++ roomname) else sendMsg clientHandle "Already exists" where hcCreate ci ri = if (null $ filter (\ xr -> roomname == name xr) ri) then (map @@ -27,9 +27,9 @@ else xc) ci, - (RoomInfo roomname "") : ri) + (RoomInfo roomname "") : ri, True) else - (ci, ri) + (ci, ri, False) handleCmd clientHandle clientsList roomsList ("LIST", []) = do rl <- atomically $ readTVar roomsList