Browse Source

added forkSession

renamed forkXMPP to fork
master
Philipp Balzarek 14 years ago
parent
commit
6c50dfb3b7
  1. 3
      src/Network/XMPP.hs
  2. 20
      src/Network/XMPP/Concurrent/Monad.hs

3
src/Network/XMPP.hs

@ -133,7 +133,8 @@ module Network.XMPP @@ -133,7 +133,8 @@ module Network.XMPP
, iqResultPayload
-- * Threads
, XMPP
, forkXMPP
, fork
, forkSession
-- * Misc
, exampleParams
) where

20
src/Network/XMPP/Concurrent/Monad.hs

@ -98,15 +98,19 @@ sendS a = do @@ -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)

Loading…
Cancel
Save