jitsi-roomsv2/backend/src/BroadcastUserData.hs

41 lines
1.1 KiB
Haskell
Raw Normal View History

{-# OPTIONS_GHC -Wno-unrecognised-pragmas #-}
{-# HLINT ignore "Redundant <$>" #-}
{-# HLINT ignore "Redundant $" #-}
{-# HLINT ignore "Redundant bracket" #-}
module BroadcastUserData
( broadcastUserData,
)
where
import ClassyPrelude
import Data.Aeson (encode)
import Types.AppTypes (HasConnectedClientState (..))
import Types.ConnectionState (Client (..))
import Types.RoomsState (HasRoomsState (..))
import Types.UsersData (UsersData (..))
import WebSocket (broadCastToClients)
broadcastUserData ::
( MonadIO m,
HasConnectedClientState env,
HasRoomsState env,
MonadReader env m
) =>
m ()
broadcastUserData = do
userWithOutRoom <- getUsersWithoutRoom
roomsData <- (getRoomsState <$> ask) >>= readMVar
let usersData = UsersData {userWithOutRoom = userWithOutRoom, roomsData = roomsData}
broadCastToClients $ (decodeUtf8 . toStrict . encode) usersData
getUsersWithoutRoom ::
( MonadIO m,
HasConnectedClientState env,
MonadReader env m
) =>
m [Text]
getUsersWithoutRoom = do
state <- (getConnectedClientState <$> ask) >>= readMVar
return $ map name $ filter (not . joinedRoom) state