summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJulien Dessaux2009-08-11 00:38:36 +0200
committerJulien Dessaux2009-08-11 00:38:36 +0200
commit7a86235906470749a7a6f88ff57c263cdeadde9a (patch)
treec5cba0eed5fa2a08f3efb7364898d9a0af014df5
parentFixed my mess with the rfc doc stuff... :p (diff)
downloadhsbot-7a86235906470749a7a6f88ff57c263cdeadde9a.tar.gz
hsbot-7a86235906470749a7a6f88ff57c263cdeadde9a.tar.bz2
hsbot-7a86235906470749a7a6f88ff57c263cdeadde9a.zip
Rethought the way I handled IRC data.
-rw-r--r--Hsbot/IRC.hs14
-rw-r--r--Hsbot/Main.hs6
2 files changed, 7 insertions, 13 deletions
diff --git a/Hsbot/IRC.hs b/Hsbot/IRC.hs
index abac6b2..7922a37 100644
--- a/Hsbot/IRC.hs
+++ b/Hsbot/IRC.hs
@@ -1,6 +1,5 @@
module Hsbot.IRC
- ( IrcInput(..)
- , IrcOutput(..)
+ ( IrcLine(..)
, connectServer
, initServer
, parseIrcMsg
@@ -21,17 +20,12 @@ type Channel = String
type Command = String
type Args = [String]
--- | Information from IRC
-data IrcInput = Cmd User Channel (Command, Maybe String) -- a regular command
- | Line User Channel String -- a normal line of little significance
- | Err String -- an error occured in parsing
- deriving (Eq,Show)
-
--- | Data that can go over the remote channel
-data IrcOutput = Str String -- a regular string
+-- | An IRC line
+data IrcLine = Str String -- a regular string
| Quit (IrcServer, Handle) -- a quit message from a server
| Join (IrcServer, Channel) -- joined a channel
| Part (IrcServer, Channel) -- parted the channel
+ | Ping (String) -- pinged by the server
| Reboot -- reboot message sent
| Nil -- signifies thread death, only happens after reboot
deriving (Eq,Show)
diff --git a/Hsbot/Main.hs b/Hsbot/Main.hs
index 3ced3a5..9edd807 100644
--- a/Hsbot/Main.hs
+++ b/Hsbot/Main.hs
@@ -28,13 +28,13 @@ imain' modul' reboot bot = do
putStrLn "Joining channels..."
mapM_ initServer servers'
putStrLn "Spawning threads..."
- chan <- newChan :: IO (Chan IrcOutput)
+ chan <- newChan :: IO (Chan IrcLine)
mapM_ (forkIO . listener chan) servers'
state <- monitor chan bot
reboot modul' bot
-- | Bot main loop, monitors the threads states and handle reboot
-monitor :: (Chan IrcOutput) -> Bot -> IO Bot
+monitor :: (Chan IrcLine) -> Bot -> IO Bot
monitor chan bot = do
loop bot
where loop bot' = do
@@ -46,7 +46,7 @@ monitor chan bot = do
Str str -> putStrLn ("received : " ++ str) >> loop bot'
-- | Thread entry point for socket listeners
-listener :: (Chan IrcOutput) -> (IrcServer, Handle) -> IO ()
+listener :: (Chan IrcLine) -> (IrcServer, Handle) -> IO ()
listener chan (server, handle) = forever $ do
str <- hGetLine handle
writeChan chan (Str str)