ircbot 0.5.1 → 0.5.2
raw patch · 2 files changed
+32/−10 lines, 2 filesdep ~networkdep ~stm
Dependency ranges changed: network, stm
Files
- Network/IRC/Bot/Core.hs +24/−6
- ircbot.cabal +8/−4
Network/IRC/Bot/Core.hs view
@@ -59,7 +59,11 @@ } -- | connect to irc server and send NICK and USER commands-ircConnect :: HostName -> PortID -> String -> User -> IO Handle+ircConnect :: HostName+ -> PortID+ -> String+ -> User+ -> IO Handle ircConnect host port n u = do h <- connectTo host port hSetBuffering h LineBuffering@@ -90,7 +94,6 @@ (Just (burst, delay)) -> do limiter <- newLimiter burst delay return (limit limiter, Just $ limitsThreadId limiter)- doConnect logger host port nick user hTMVar connQSem outgoingTid <- forkIO $ forever $ do msg <- readChan outgoingChan writeMaybeChan logChan msg@@ -99,7 +102,9 @@ hPutStrLn h (encode msg) `catch` (reconnect logger host port nick user hTMVar connQSem) now <- getCurrentTime atomically $ swapTMVar tmv now- incomingTid <- forkIO $ forever $+ incomingTid <- forkIO $ do+ doConnect logger host port nick user hTMVar connQSem+ forever $ do h <- atomically $ readTMVar hTMVar msgStr <- (hGetLine h) `catch` (\e -> reconnect logger host port nick user hTMVar connQSem e >> return "") now <- getCurrentTime@@ -111,14 +116,21 @@ writeMaybeChan logChan msg writeChan incomingChan msg let forceReconnect =- do putStrLn "forceReconnect 1"+ do putStrLn "forceReconnect: getting handle" h <- atomically $ readTMVar hTMVar- putStrLn "forceReconnect 2"+ putStrLn "forceReconnect: sending /quit" writeChan outgoingChan (quit $ Just "restarting...")+ putStrLn "forceReconnect: closing handle" hClose h- putStrLn "forceReconnect 3"+ putStrLn "done." return (outgoingTid, incomingTid, limitTid, forceReconnect) +ircConnectLoop :: (LogLevel -> String -> IO a) -- ^ logging+ -> HostName+ -> PortID+ -> String+ -> User+ -> IO Handle ircConnectLoop logger host port nick user = (ircConnect host port nick user) `catch` (\e ->@@ -138,6 +150,12 @@ reconnect :: Logger -> String -> PortID -> String -> User -> TMVar Handle -> QSem -> IOException -> IO () reconnect logger host port nick user hTMVar connQSem e = do logger Normal $ "IRC Connection died: " ++ show e+{-+ atomically $ do empty <- isEmptyTMVar hTMVar+ if empty+ then return ()+ else takeTMVar hTMVar >> return ()+-} doConnect logger host port nick user hTMVar connQSem onConnectLoop :: Logger -> String -> String -> Chan Message -> QSem -> BotPartT IO () -> IO ThreadId
ircbot.cabal view
@@ -1,7 +1,7 @@ Name: ircbot-Version: 0.5.1+Version: 0.5.2 Synopsis: A library for writing irc bots-Homepage: http://patch-tag.com/r/stepcut/ircbot+Homepage: http://hub.darcs.net/stepcut/ircbot License: BSD3 License-file: LICENSE Author: Jeremy Shaw, Eric Mertens@@ -12,6 +12,10 @@ Build-type: Simple Cabal-version: >=1.6 +source-repository head+ type: darcs+ location: http://hub.darcs.net/stepcut/ircbot+ Library Exposed-modules: Network.IRC.Bot@@ -36,10 +40,10 @@ filepath >= 1.2 && < 1.4, irc == 0.5.*, mtl >= 2.0 && < 2.2,- network == 2.3.*,+ network >= 2.3 && < 2.5, old-locale == 1.0.*, parsec == 3.1.*, time == 1.4.*, unix >= 2.4 && < 2.6, random == 1.0.*,- stm >= 2.2 && < 2.4+ stm >= 2.2 && < 2.5