Network.Wai.Handler.WebSockets

wai-websockets-3.0.1.1: Provide a bridge between WAI and the websockets package.

Safe Haskell | None
Language | Haskell98

Network.Wai.Handler.WebSockets

Synopsis

- websocketsOr :: ConnectionOptions -> ServerApp -> Application -> Application
- websocketsApp :: ConnectionOptions -> ServerApp -> Request -> Maybe Response
- isWebSocketsReq :: Request -> Bool
- getRequestHead :: Request -> RequestHead
- runWebSockets :: ConnectionOptions -> RequestHead -> (PendingConnection -> IO a) -> IO ByteString -> (ByteString -> IO ()) -> IO a

# Documentation

websocketsOr :: ConnectionOptions -> ServerApp -> Application -> Application #

Upgrade a `websockets` `ServerApp` to a `wai` `Application`. Uses the given backup `Application` to handle `Request`s that are not WebSocket requests.

    websocketsOr opts ws_app backup_app = \req respond ->
        case websocketsApp opts ws_app req of
            Nothing  -> backup_app req send_response
            Just res -> respond res

For example, below is an `Application` that sends `"Hello, client!"` to each connected client.

    app :: Application
    app = websocketsOr defaultConnectionOptions wsApp backupApp
      where
        wsApp :: ServerApp
        wsApp pending_conn = do
            conn <- acceptRequest pending_conn
            sendTextData conn ("Hello, client!" :: Text)

        backupApp :: Application
        backupApp _ respond = respond $ responseLBS status400 [] "Not a WebSocket request"

websocketsApp :: ConnectionOptions -> ServerApp -> Request -> Maybe Response #

Handle a single `wai` `Request` with the given `websockets` `ServerApp`. Returns `Nothing` if the `Request` is not a WebSocket request, `Just` otherwise.

Usually, `websocketsOr` is more convenient.

isWebSocketsReq :: Request -> Bool #

Returns whether or not the given `Request` is a WebSocket request.

getRequestHead :: Request -> RequestHead #

runWebSockets :: ConnectionOptions -> RequestHead -> (PendingConnection -> IO a) -> IO ByteString -> (ByteString -> IO ()) -> IO a #

Internal function to run the WebSocket io-streams using the conduit library.