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

Safe HaskellNone




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

Upgrade a websockets ServerApp to a wai Application. Uses the given backup Application to handle Requests 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
    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 Source #

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 Source #

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

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

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