From cad543455365909371184c5d000d5f6c4eed2e88 Mon Sep 17 00:00:00 2001 From: joe Date: Fri, 28 Jun 2013 03:00:55 -0400 Subject: Converted fromClient to use MaybeT --- Presence/XMPP.hs | 27 ++++++++++++++++++++------- 1 file changed, 20 insertions(+), 7 deletions(-) diff --git a/Presence/XMPP.hs b/Presence/XMPP.hs index 7e513212..d0333f4a 100644 --- a/Presence/XMPP.hs +++ b/Presence/XMPP.hs @@ -74,15 +74,28 @@ xmlifyPresenceForClient (Presence jid stat) = do shw Offline = "away" -- Is this right? +-- type Consumer i m r = forall o. ConduitM i o m r +mawait :: Monad m => MaybeT (ConduitM i o m) i +mawait = MaybeT await + +elementAttrs expected (EventBeginElement name attrs) + | nameLocalName name==expected + = return attrs +elementAttrs _ _ = mzero + fromClient :: MonadIO m => TChan Commands -> Sink XML.Event m () -fromClient cmdChan = fix $ \loop -> do - mb <- await - maybe (return ()) - (\packet -> do - liftIO (L.putStrLn $ "client-in: " <++> bshow packet) - loop) - mb +fromClient cmdChan = (>>return ()) . runMaybeT $ do + mawait >>= guard . (==EventBeginDocument) + liftIO . L.putStrLn $ "client-in: begin-doc " + xml <- mawait + stream_attrs <- elementAttrs "stream" xml + liftIO . L.putStrLn $ "client-in: stream " <++> bshow stream_attrs + fix $ \loop -> do + xml <- mawait + liftIO (L.putStrLn $ "client-in: " <++> bshow xml) + loop + toClient :: MonadIO m => TChan Presence -> TChan Commands -> Source m XML.Event toClient pchan cmdChan = fix $ \loop -> do -- cgit v1.2.3