{-# LANGUAGE OverloadedStrings #-} -- | -- Module: Network.FastIRC.IO -- Copyright: (c) 2010 Ertugrul Soeylemez -- License: BSD3 -- Maintainer: Ertugrul Soeylemez -- Stability: alpha -- -- This module helps you with doing input and output on IRC connections -- or even log files. module Network.FastIRC.IO ( hGetIRCLine, hGetMessage, hPutCommand, hPutMessage ) where import qualified Data.ByteString.Char8 as B import Network.FastIRC.Messages import Network.FastIRC.Types import Network.FastIRC.Utils import System.IO -- | Read an IRC message string. hGetIRCLine :: Handle -> IO MsgString hGetIRCLine h = getl B.empty where getl :: MsgString -> IO MsgString getl buf = do c <- hGetChar h if isIRCEOLChar c then return buf else getl (B.snoc buf c) -- | Read the next valid IRC message. hGetMessage :: Handle -> IO Message hGetMessage h = do line <- hGetIRCLine h if B.null line then hGetMessage h else case readMessage line of Just msg -> return msg Nothing -> hGetMessage h -- | Write an IRC command with no origin. hPutCommand :: Handle -> Command -> IO () hPutCommand h cmd = B.hPutStr h $ B.append (showCommand cmd) "\r\n" -- | Write an IRC message. hPutMessage :: Handle -> Message -> IO () hPutMessage h msg = B.hPutStr h $ B.append (showMessage msg) "\r\n"