-- | Interface to the management event bus. module Control.Distributed.Process.Management.Internal.Bus ( publishEvent ) where import Control.Distributed.Process.Internal.CQueue ( enqueue ) import Control.Distributed.Process.Internal.Types ( MxEventBus(..) , Message ) import Data.Foldable (forM_) import System.Mem.Weak (deRefWeak) publishEvent :: MxEventBus -> Message -> IO () publishEvent MxEventBusInitialising _ = return () publishEvent (MxEventBus _ _ wqRef _) msg = do mQueue <- deRefWeak wqRef forM_ mQueue $ \queue -> enqueue queue msg