module Pipes.WebSockets where
import Pipes
import qualified Network.WebSockets as WS
import Control.Monad.Trans.Reader (ReaderT
, ask)
type WebSocketsT = ReaderT WS.Connection
wsInOnce :: (MonadIO m, WS.WebSocketsData a) => Producer a (WebSocketsT m) ()
wsInOnce = do
conn <- lift ask
x <- liftIO (WS.receiveData conn)
yield x
wsIn :: (MonadIO m, WS.WebSocketsData a) => Producer a (WebSocketsT m) ()
wsIn = wsInOnce >> wsIn
wsOut :: (MonadIO m, WS.WebSocketsData a) => Consumer a (WebSocketsT m) ()
wsOut = do
conn <- lift ask
m <- await
liftIO $ WS.sendTextData conn m