module Signal.Subscriber.Internal ( Subscriber(..)
, addSubscriptionDisposable
, disposeSubscriber
) where
import Control.Applicative
import Control.Concurrent
import Control.Concurrent.STM
import Data.Word
import Disposable
import Scheduler
import Signal.Event
data Subscriber s v = Subscriber {
onEvent :: Event v -> SchedulerIO s (),
disposables :: DisposableSet,
lockedThread :: TVar ThreadId,
threadLockCounter :: TVar Word32,
disposed :: TVar Bool
}
addSubscriptionDisposable :: Subscriber s v -> Disposable -> IO ()
addSubscriptionDisposable = addDisposable . disposables
disposeSubscriber :: Subscriber s v -> IO ()
disposeSubscriber s = toDisposable (disposables s) >>= dispose