# HG changeset patch # User unc0rr # Date 1389525359 -14400 # Node ID 7589978c99125d3473ba99023be31e8f5aa1e05a # Parent 0719028357708eccdbb7799913795f035ea2a10e Stub for joins monitor which is a replacement to plain ban for 10 seconds system after join diff -r 071902835770 -r 7589978c9912 gameServer/Actions.hs --- a/gameServer/Actions.hs Sun Jan 12 11:07:49 2014 +0400 +++ b/gameServer/Actions.hs Sun Jan 12 15:15:59 2014 +0400 @@ -569,13 +569,18 @@ return ci modify (\s -> s{clientIndex = Just newClId}) - mapM_ processAction - [ - AnswerClients [sendChan cl] ["CONNECTED", "Hedgewars server http://www.hedgewars.org/", serverVersion] - , CheckBanned True - , AddIP2Bans (host cl) "Reconnected too fast" (addUTCTime 10 $ connectTime cl) - ] + + jm <- gets joinsMonitor + pass <- io $ joinsSentry jm (host cl) (connectTime cl) + if pass then + mapM_ processAction + [ + CheckBanned True + , AnswerClients [sendChan cl] ["CONNECTED", "Hedgewars server http://www.hedgewars.org/", serverVersion] + ] + else + processAction $ ByeClient $ loc "Reconnected too fast" processAction (AddNick2Bans n reason expiring) = do processAction $ ModifyServerInfo (\s -> s{bans = BanByNick n reason expiring : bans s}) @@ -760,3 +765,11 @@ , [AnswerClients [c] $ "EM" : roundMsgs'] , [AnswerClients [c] ["KICKED"]] ] + + +processAction Cleanup = do + jm <- gets joinsMonitor + + io $ do + t <- getCurrentTime + cleanup jm t diff -r 071902835770 -r 7589978c9912 gameServer/CoreTypes.hs --- a/gameServer/CoreTypes.hs Sun Jan 12 11:07:49 2014 +0400 +++ b/gameServer/CoreTypes.hs Sun Jan 12 15:15:59 2014 +0400 @@ -16,7 +16,6 @@ ----------------------- import RoomsAndClients - #if __GLASGOW_HASKELL__ < 706 instance NFData B.ByteString #endif @@ -78,6 +77,7 @@ | Random [ClientChan] [B.ByteString] | QueryReplay B.ByteString | ShowReplay B.ByteString + | Cleanup type ClientChan = Chan [B.ByteString] diff -r 071902835770 -r 7589978c9912 gameServer/ServerCore.hs --- a/gameServer/ServerCore.hs Sun Jan 12 11:07:49 2014 +0400 +++ b/gameServer/ServerCore.hs Sun Jan 12 15:15:59 2014 +0400 @@ -62,7 +62,9 @@ TimerAction tick -> mapM_ processAction $ - PingAll : [StatsAction | even tick] + PingAll + : [StatsAction | even tick] + ++ [Cleanup | tick `mod` 100 == 0] startServer :: ServerInfo -> IO () @@ -79,5 +81,6 @@ startDBConnection si rnc <- newRoomsAndClients newRoom + jm <- newJoinMonitor - evalStateT mainLoop (ServerState Nothing si Set.empty rnc) + evalStateT mainLoop (ServerState Nothing si Set.empty rnc jm) diff -r 071902835770 -r 7589978c9912 gameServer/ServerState.hs --- a/gameServer/ServerState.hs Sun Jan 12 11:07:49 2014 +0400 +++ b/gameServer/ServerState.hs Sun Jan 12 15:15:59 2014 +0400 @@ -1,6 +1,7 @@ module ServerState ( module RoomsAndClients, + module JoinsMonitor, clientRoomA, ServerState(..), client's, @@ -17,12 +18,14 @@ ---------------------- import RoomsAndClients import CoreTypes +import JoinsMonitor data ServerState = ServerState { clientIndex :: !(Maybe ClientIndex), serverInfo :: !ServerInfo, removedClients :: !(Set.Set ClientIndex), - roomsClients :: !MRnC + roomsClients :: !MRnC, + joinsMonitor :: !JoinsMonitor }