Added proper signal handling support
parent
8cf2872432
commit
d952869ba2
8
Main.hs
8
Main.hs
|
@ -5,10 +5,12 @@ module Main (main) where
|
||||||
import qualified Data.Configurator as CF
|
import qualified Data.Configurator as CF
|
||||||
|
|
||||||
import ClassyPrelude hiding (try, getArgs)
|
import ClassyPrelude hiding (try, getArgs)
|
||||||
import Control.Exception
|
import Control.Concurrent.Lifted
|
||||||
|
import Control.Exception.Lifted
|
||||||
import Data.Configurator.Types
|
import Data.Configurator.Types
|
||||||
import System.Environment
|
import System.Environment
|
||||||
import System.Exit
|
import System.Exit
|
||||||
|
import System.Posix.Signals
|
||||||
|
|
||||||
import Network.IRC.Types (BotConfig(BotConfig))
|
import Network.IRC.Types (BotConfig(BotConfig))
|
||||||
import Network.IRC.Client
|
import Network.IRC.Client
|
||||||
|
@ -26,6 +28,10 @@ main = do
|
||||||
putStrLn $ "Usage: " ++ pack prog ++ " <config file path>"
|
putStrLn $ "Usage: " ++ pack prog ++ " <config file path>"
|
||||||
exitFailure
|
exitFailure
|
||||||
|
|
||||||
|
mainThreadId <- myThreadId
|
||||||
|
installHandler sigINT (Catch $ throwTo mainThreadId UserInterrupt) Nothing
|
||||||
|
installHandler sigTERM (Catch $ throwTo mainThreadId UserInterrupt) Nothing
|
||||||
|
|
||||||
let configFile = headEx args
|
let configFile = headEx args
|
||||||
loadBotConfig configFile >>= run
|
loadBotConfig configFile >>= run
|
||||||
|
|
||||||
|
|
|
@ -33,8 +33,8 @@ sendCommand Bot { .. } reply = do
|
||||||
TF.hprint socket "{}\r\n" $ TF.Only line
|
TF.hprint socket "{}\r\n" $ TF.Only line
|
||||||
TF.print "[{}] > {}\n" $ TF.buildParams (formatTime defaultTimeLocale "%F %T" time, line)
|
TF.print "[{}] > {}\n" $ TF.buildParams (formatTime defaultTimeLocale "%F %T" time, line)
|
||||||
|
|
||||||
listen :: IRC ()
|
listenerLoop :: IRC ()
|
||||||
listen = do
|
listenerLoop = do
|
||||||
status <- get
|
status <- get
|
||||||
bot@Bot { .. } <- ask
|
bot@Bot { .. } <- ask
|
||||||
let nick = botNick botConfig
|
let nick = botNick botConfig
|
||||||
|
@ -73,7 +73,7 @@ listen = do
|
||||||
return nStatus
|
return nStatus
|
||||||
|
|
||||||
put nStatus
|
put nStatus
|
||||||
when (nStatus /= Disconnected) listen
|
when (nStatus /= Disconnected) listenerLoop
|
||||||
|
|
||||||
loadMsgHandlers :: BotConfig -> IO MsgHandlerStates
|
loadMsgHandlers :: BotConfig -> IO MsgHandlerStates
|
||||||
loadMsgHandlers botConfig@BotConfig { .. } =
|
loadMsgHandlers botConfig@BotConfig { .. } =
|
||||||
|
@ -142,4 +142,4 @@ run botConfig' = withSocketsDo $ do
|
||||||
go bot = do
|
go bot = do
|
||||||
sendCommand bot NickCmd
|
sendCommand bot NickCmd
|
||||||
sendCommand bot UserCmd
|
sendCommand bot UserCmd
|
||||||
runIRC bot Connected listen
|
runIRC bot Connected listenerLoop
|
||||||
|
|
|
@ -5,7 +5,7 @@ module Network.IRC.Handlers.SongSearch (getMsgHandler) where
|
||||||
import qualified Data.Configurator as CF
|
import qualified Data.Configurator as CF
|
||||||
|
|
||||||
import ClassyPrelude hiding (try)
|
import ClassyPrelude hiding (try)
|
||||||
import Control.Exception
|
import Control.Exception.Lifted
|
||||||
import Control.Monad.Reader
|
import Control.Monad.Reader
|
||||||
import Data.Aeson
|
import Data.Aeson
|
||||||
import Data.Aeson.Types (emptyArray)
|
import Data.Aeson.Types (emptyArray)
|
||||||
|
|
|
@ -49,11 +49,22 @@ build-type: Simple
|
||||||
cabal-version: >=1.10
|
cabal-version: >=1.10
|
||||||
|
|
||||||
library
|
library
|
||||||
build-depends: base >=4.5 && <4.7, text >=0.11 && <0.12, mtl >=2.1 && <2.2,
|
build-depends: base >=4.5 && <4.7,
|
||||||
network >=2.3 && <2.5, configurator >= 0.2, time >=1.4.0,
|
text >=0.11 && <0.12,
|
||||||
curl-aeson ==0.0.3, aeson >=0.6.0.0, HTTP, transformers >=0.3,
|
mtl >=2.1 && <2.2,
|
||||||
classy-prelude ==0.9.1, text-format >= 0.3.1, filepath >=1.3, directory >=1.2,
|
network >=2.3 && <2.5,
|
||||||
lifted-base >=0.2
|
configurator >= 0.2,
|
||||||
|
time >=1.4.0,
|
||||||
|
curl-aeson ==0.0.3,
|
||||||
|
aeson >=0.6.0.0,
|
||||||
|
HTTP >=4000,
|
||||||
|
transformers >=0.3,
|
||||||
|
classy-prelude ==0.9.1,
|
||||||
|
text-format >= 0.3.1,
|
||||||
|
filepath >=1.3,
|
||||||
|
directory >=1.2,
|
||||||
|
lifted-base >=0.2,
|
||||||
|
unix >=2.7
|
||||||
|
|
||||||
exposed-modules: Network.IRC.Types, Network.IRC.Protocol,
|
exposed-modules: Network.IRC.Types, Network.IRC.Protocol,
|
||||||
Network.IRC.Handlers, Network.IRC.Client
|
Network.IRC.Handlers, Network.IRC.Client
|
||||||
|
@ -74,11 +85,22 @@ executable hask-irc
|
||||||
other-extensions: RecordWildCards, OverloadedStrings, ScopedTypeVariables, OverlappingInstances
|
other-extensions: RecordWildCards, OverloadedStrings, ScopedTypeVariables, OverlappingInstances
|
||||||
|
|
||||||
-- Other library packages from which modules are imported.
|
-- Other library packages from which modules are imported.
|
||||||
build-depends: base >=4.5 && <4.7, text >=0.11 && <0.12, mtl >=2.1 && <2.2,
|
build-depends: base >=4.5 && <4.7,
|
||||||
network >=2.3 && <2.5, configurator >= 0.2, time >=1.4.0,
|
text >=0.11 && <0.12,
|
||||||
curl-aeson ==0.0.3, aeson >=0.6.0.0, HTTP, transformers >=0.3,
|
mtl >=2.1 && <2.2,
|
||||||
classy-prelude ==0.9.1, text-format >= 0.3.1, filepath >=1.3, directory >=1.2,
|
network >=2.3 && <2.5,
|
||||||
lifted-base >=0.2
|
configurator >= 0.2,
|
||||||
|
time >=1.4.0,
|
||||||
|
curl-aeson ==0.0.3,
|
||||||
|
aeson >=0.6.0.0,
|
||||||
|
HTTP >=4000,
|
||||||
|
transformers >=0.3,
|
||||||
|
classy-prelude ==0.9.1,
|
||||||
|
text-format >= 0.3.1,
|
||||||
|
filepath >=1.3,
|
||||||
|
directory >=1.2,
|
||||||
|
lifted-base >=0.2,
|
||||||
|
unix >=2.7
|
||||||
|
|
||||||
-- Directories containing source files.
|
-- Directories containing source files.
|
||||||
-- hs-source-dirs:
|
-- hs-source-dirs:
|
||||||
|
|
Loading…
Reference in New Issue