From 6c50dfb3b739954d39db14e308c721b64344ec9b Mon Sep 17 00:00:00 2001 From: Philipp Balzarek Date: Wed, 25 Apr 2012 11:49:47 +0200 Subject: [PATCH] added forkSession renamed forkXMPP to fork --- src/Network/XMPP.hs | 3 ++- src/Network/XMPP/Concurrent/Monad.hs | 20 ++++++++++++-------- 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/src/Network/XMPP.hs b/src/Network/XMPP.hs index b2a1e54..af4ed0a 100644 --- a/src/Network/XMPP.hs +++ b/src/Network/XMPP.hs @@ -133,7 +133,8 @@ module Network.XMPP , iqResultPayload -- * Threads , XMPP - , forkXMPP + , fork + , forkSession -- * Misc , exampleParams ) where diff --git a/src/Network/XMPP/Concurrent/Monad.hs b/src/Network/XMPP/Concurrent/Monad.hs index 2d97372..84cb77e 100644 --- a/src/Network/XMPP/Concurrent/Monad.hs +++ b/src/Network/XMPP/Concurrent/Monad.hs @@ -98,15 +98,19 @@ sendS a = do liftIO . atomically $ writeTChan out a return () +-- | Create a forked session object without forking a thread +forkSession :: Session -> IO Session +forkSession sess = do + mCH' <- newIORef Nothing + pCH' <- newIORef Nothing + return $ sess {messagesRef = mCH' ,presenceRef = pCH'} + -- | Fork a new thread -forkXMPP :: XMPP () -> XMPP ThreadId -forkXMPP a = do - thread <- ask - mCH' <- liftIO $ newIORef Nothing - pCH' <- liftIO $ newIORef Nothing - liftIO $ forkIO $ runReaderT a (thread {messagesRef = mCH' - ,presenceRef = pCH' - }) +fork :: XMPP () -> XMPP ThreadId +fork a = do + sess <- ask + sess' <- liftIO $ forkSession sess + liftIO $ forkIO $ runReaderT a sess' filterMessages :: (MessageError -> Bool) -> (Message -> Bool)