diff -r 151c8e553de2 -r 9e94a9bc8c7e gameServer/OfficialServer/extdbinterface.hs --- a/gameServer/OfficialServer/extdbinterface.hs Tue Aug 06 00:26:07 2013 +0400 +++ b/gameServer/OfficialServer/extdbinterface.hs Sat Aug 24 00:13:15 2013 +0400 @@ -9,8 +9,11 @@ import Data.Maybe import Database.HDBC import Database.HDBC.MySQL +import Data.List (lookup) +import qualified Data.ByteString.Char8 as B -------------------------- import CoreTypes +import Utils dbQueryAccount = @@ -19,6 +22,11 @@ dbQueryStats = "INSERT INTO gameserver_stats (players, rooms, last_update) VALUES (?, ?, UNIX_TIMESTAMP())" +dbQueryAchievement = + "INSERT INTO achievements (typeid, userid, value, filename, location) \ + \ VALUES ((SELECT id FROM achievement_types WHERE name = ?), (SELECT uid FROM users WHERE name = ?), \ + \ ?, ?, ?)" + dbInteractionLoop dbConn = forever $ do q <- liftM read getLine hPutStrLn stderr $ show q @@ -45,7 +53,27 @@ SendStats clients rooms -> run dbConn dbQueryStats [SqlInt32 $ fromIntegral clients, SqlInt32 $ fromIntegral rooms] >> return () +--StoreAchievements (B.pack fileName) (map toPair teams) info + StoreAchievements fileName teams info -> + mapM_ (run dbConn dbQueryAchievement) $ (parseStats fileName teams) info +<<<<<<< local + StoreAchievements {} -> return () + +======= +parseStats :: B.ByteString -> [(B.ByteString, B.ByteString)] -> [B.ByteString] -> [[SqlValue]] +parseStats fileName teams = ps + where + ps ("DRAW" : bs) = ps bs + ps ("WINNERS" : n : bs) = ps $ drop (readInt_ n) bs + ps ("ACHIEVEMENT" : typ : teamname : location : value : bs) = + [SqlByteString typ + , SqlByteString $ fromMaybe "" (lookup teamname teams) + , SqlInt32 (readInt_ value) + , SqlByteString fileName + , SqlByteString location + ] : ps bs +>>>>>>> other dbConnectionLoop mySQLConnectionInfo = Control.Exception.handle (\(e :: IOException) -> hPutStrLn stderr $ show e) $ handleSqlError $