Commit e0d24793 authored by Mart Lubbers's avatar Mart Lubbers

change start signature

parent d6d828d0
......@@ -14,31 +14,31 @@ import StdBool
TIMEOUT :== Just 1000
bot :: (String, Int) [IRCMessage] [IRCMessage] .a (IRCMessage .a *World -> *(Maybe [IRCMessage], .a, *World)) *World -> *(Maybe String, .a, *World)
bot :: (String, Int) [IRCMessage] [IRCMessage] .a (IRCMessage *(.a, *World) -> *(Maybe [IRCMessage], (.a, *World))) *World -> *(Maybe String, *(.a, *World))
bot (host, port) start end state bot w
//Lookup hostname
# (ip, w) = lookupIPAddress host w
| isNothing ip
= (Just $ "DNS lookup for " +++ host +++ " failed", state, w)
= (Just $ "DNS lookup for " +++ host +++ " failed", (state, w))
//Connect
# (rpt,chan,w) = connectTCP_MT TIMEOUT (fromJust ip, port) w
| rpt == TR_Expired
= (Just $ "Connection to " +++ host +++ " timed out", state, w)
= (Just $ "Connection to " +++ host +++ " timed out", (state, w))
| rpt == TR_NoSuccess
= (Just $ "Could not connect to " +++ host, state, w)
= (Just $ "Could not connect to " +++ host, (state, w))
// Send startup commands
# (merr, chan, w) = send (map toString start) (fromJust chan) w
| isError merr = (Just $ fromError merr, state, w)
| isError merr = (Just $ fromError merr, (state, w))
//Start processing function
# (mer, chan, state, w) = process chan "" state bot w
| isError mer = (Just $ fromError mer, state, w)
| isError mer = (Just $ fromError mer, (state, w))
// Send shutdown commands
# (merr, {rChannel,sChannel}, w) = send (map toString end) chan w
| isError merr = (Just $ fromError merr, state, w)
| isError merr = (Just $ fromError merr, (state, w))
//Close channels
= (Nothing, state, closeChannel sChannel (closeRChannel rChannel w))
= (Nothing, (state, closeChannel sChannel (closeRChannel rChannel w)))
process :: TCP_DuplexChannel String .a (IRCMessage .a *World -> (Maybe [IRCMessage], .a, *World)) *World -> (MaybeErrorString (), TCP_DuplexChannel, .a, *World)
process :: TCP_DuplexChannel String .a (IRCMessage (.a, *World) -> (Maybe [IRCMessage], (.a, *World))) *World -> (MaybeErrorString (), TCP_DuplexChannel, (.a, *World))
process chan acc state bot w
//See if we have a message
= case split "\r\n" acc of
......@@ -46,21 +46,21 @@ process chan acc state bot w
[m]
//Receive
# (merr_resp, chan, w) = recv chan w
| isError merr_resp = (Error (fromError merr_resp), chan, state, w)
| isError merr_resp = (Error (fromError merr_resp), chan, (state, w))
# (Ok mresp) = merr_resp
| isNothing mresp = process chan acc state bot w
= process chan (m +++ fromJust mresp) state bot w
= process chan (m +++ fromJust mresp) (state, bot) w
//We have a successfull split and therefore we process at least one message
[m:xs]
# acc = join "\r\n" xs
= case parseIRCMessage $ m +++ "\r\n" of
(Left err) = (Error $ "IRC Parsing error: " +++ join "\n" err, chan, state, w)
(Right msg)
# (mircc, state, w) = bot msg state w
| isNothing mircc = (Ok (), chan, state, w) // Bot asks to quit
# (mircc, state, w) = bot msg (state, w)
| isNothing mircc = (Ok (), chan, (state, w)) // Bot asks to quit
//Possible send the commands
# (merr, chan, w) = send (map toString $ fromJust mircc) chan w
| isError merr = (Error $ fromError merr, chan, state, w)
| isError merr = (Error $ fromError merr, chan, (state, w))
//Recurse
= process chan acc state bot w
......
......@@ -108,15 +108,15 @@ cloogle data w
, bs_strftime :: String
}
//Start :: *World -> (MaybeErrorString (), *World)
Start :: *World -> (Maybe String, *World)
Start w
# ([arg0:args], w) = getCommandLine w
# (io, w) = stdio w
# bs = parseCLI args
| isError bs = (Error $ "\n" +++ fromError bs +++ "\n", snd $ fclose io w)
| isError bs = (Just $ "\n" +++ fromError bs +++ "\n", snd $ fclose io w)
# (Ok bs) = bs
# (merr, io, w) = bot (bs.bs_server, bs.bs_port) (startup bs) shutdown io (process bs.bs_strftime) w
= (maybe (Ok ()) Error merr, snd $ fclose io w)
= (merr, snd $ fclose io w)
where
parseCLI :: [String] -> MaybeErrorString BotSettings
parseCLI [] = Ok
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment