diff -r da43c36a6e92 -r f11d80bac7ed gameServer/Utils.hs --- a/gameServer/Utils.hs Sun Feb 06 18:59:53 2011 +0300 +++ b/gameServer/Utils.hs Sun Feb 06 21:50:29 2011 +0300 @@ -1,21 +1,15 @@ {-# LANGUAGE OverloadedStrings #-} module Utils where -import Control.Concurrent -import Control.Concurrent.STM import Data.Char import Data.Word import qualified Data.Map as Map -import qualified Data.IntMap as IntMap import qualified Data.Set as Set -import Data.ByteString.Internal (w2c) import Numeric import Network.Socket import System.IO import qualified Data.List as List import Control.Monad -import Control.Monad.Trans -import Data.Maybe ------------------------------------------------- import qualified Codec.Binary.Base64 as Base64 import qualified Data.ByteString.Char8 as B @@ -27,14 +21,14 @@ sockAddr2String (SockAddrInet _ hostAddr) = liftM B.pack $ inet_ntoa hostAddr sockAddr2String (SockAddrInet6 _ _ (a, b, c, d) _) = return $ B.pack $ (foldr1 (.) - $ List.intersperse (\a -> ':':a) - $ concatMap (\n -> (\(a, b) -> [showHex a, showHex b]) $ divMod n 65536) [a, b, c, d]) [] + $ List.intersperse (':':) + $ concatMap (\n -> (\(a0, a1) -> [showHex a0, showHex a1]) $ divMod n 65536) [a, b, c, d]) [] toEngineMsg :: B.ByteString -> B.ByteString -toEngineMsg msg = B.pack $ Base64.encode (fromIntegral (BW.length msg) : (BW.unpack msg)) +toEngineMsg msg = B.pack $ Base64.encode (fromIntegral (BW.length msg) : BW.unpack msg) fromEngineMsg :: B.ByteString -> Maybe B.ByteString -fromEngineMsg msg = Base64.decode (B.unpack msg) >>= removeLength >>= return . BW.pack +fromEngineMsg msg = liftM BW.pack (Base64.decode (B.unpack msg) >>= removeLength) where removeLength (x:xs) = if length xs == fromIntegral x then Just xs else Nothing removeLength _ = Nothing @@ -43,7 +37,7 @@ checkNetCmd = check . liftM B.unpack . fromEngineMsg where check Nothing = (False, False) - check (Just (m:ms)) = (m `Set.member` legalMessages, m == '+') + check (Just (m:_)) = (m `Set.member` legalMessages, m == '+') check _ = (False, False) legalMessages = Set.fromList $ "M#+LlRrUuDdZzAaSjJ,sFNpPwtghb12345" ++ slotMessages slotMessages = "\128\129\130\131\132\133\134\135\136\137\138" @@ -62,20 +56,20 @@ : teamvoicepack team : teamflag team : teamowner team - : (B.pack $ show $ difficulty team) + : (B.pack . show $ difficulty team) : hhsInfo where - hhsInfo = concatMap (\(HedgehogInfo name hat) -> [name, hat]) $ hedgehogs team + hhsInfo = concatMap (\(HedgehogInfo n hat) -> [n, hat]) $ hedgehogs team modifyTeam :: TeamInfo -> RoomInfo -> RoomInfo modifyTeam team room = room{teams = replaceTeam team $ teams room} where replaceTeam _ [] = error "modifyTeam: no such team" - replaceTeam team (t:teams) = - if teamname team == teamname t then - team : teams + replaceTeam tm (t:ts) = + if teamname tm == teamname t then + tm : ts else - t : replaceTeam team teams + t : replaceTeam tm ts illegalName :: B.ByteString -> Bool illegalName b = null s || all isSpace s || isSpace (head s) || isSpace (last s)