fastirc-0.2.0: Network/FastIRC/IO.hs
{-# LANGUAGE OverloadedStrings #-}
-- |
-- Module: Network.FastIRC.IO
-- Copyright: (c) 2010 Ertugrul Soeylemez
-- License: BSD3
-- Maintainer: Ertugrul Soeylemez <es@ertes.de>
-- 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"