| Safe Haskell | None |
|---|---|
| Language | GHC2021 |
Web.Hyperbole.Application
Synopsis
- waiApp :: ServerOptions -> Eff '[Hyperbole, Concurrent, IOE] Response -> Application
- websocketsOr :: ConnectionOptions -> ServerApp -> Application -> Application
- defaultConnectionOptions :: ConnectionOptions
- liveApp :: (ByteString -> ByteString) -> Eff '[Hyperbole, Concurrent, IOE] Response -> Application
- liveAppWith :: ServerOptions -> Eff '[Hyperbole, Concurrent, IOE] Response -> Application
- data ServerOptions = ServerOptions {}
- defaultErrorMessage :: ResponseError -> Text
- defaultParseRequestBodyOptions :: ParseRequestBodyOptions
- defaultError :: ResponseError -> ServerError
- socketApp :: MonadIO m => ServerOptions -> Request -> Eff '[Hyperbole, Concurrent, IOE] Response -> PendingConnection -> m ()
- quickStartDocument :: ByteString -> ByteString
- routeRequest :: forall (es :: [Effect]) route. (Hyperbole :> es, Route route) => (route -> Eff es Response) -> Eff es Response
Documentation
waiApp :: ServerOptions -> Eff '[Hyperbole, Concurrent, IOE] Response -> Application Source #
websocketsOr :: ConnectionOptions -> ServerApp -> Application -> Application #
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 ::Applicationapp =websocketsOrdefaultConnectionOptionswsApp backupApp where wsApp ::ServerAppwsApp pending_conn = do conn <-acceptRequestpending_connsendTextDataconn ("Hello, client!" ::Text) backupApp ::ApplicationbackupApp _ respond = respond $responseLBSstatus400[] "Not a WebSocket request"
defaultConnectionOptions :: ConnectionOptions #
The default connection options:
- Nothing happens when a pong is received.
- Compression is disabled.
- Lenient unicode decoding.
- 30 second timeout for connection establishment.
liveApp :: (ByteString -> ByteString) -> Eff '[Hyperbole, Concurrent, IOE] Response -> Application Source #
Turn one or more Pages into a Wai Application. Respond using both HTTP and WebSockets
main :: IO () main = do run 3000 $ liveApp quickStartDocument (runPage page)
liveAppWith :: ServerOptions -> Eff '[Hyperbole, Concurrent, IOE] Response -> Application Source #
Run a Hyperbole application, customizing both the document and the format of server errors
data ServerOptions Source #
Constructors
| ServerOptions | |
Fields | |
defaultParseRequestBodyOptions :: ParseRequestBodyOptions #
A reasonable default set of parsing options. Maximum key/filename length: 32 bytes; maximum files: 10; filesize unlimited; maximum size for parameters: 64kbytes; maximum number of header lines: 32 bytes (applies only to headers of a mime/multipart message); maximum header line length: Apache's default for that is 8190 bytes (http:/httpd.apache.orgdocs2.2mod/core.html#limitrequestline) so we're using that here as well.
Since: wai-extra-3.0.16.0
socketApp :: MonadIO m => ServerOptions -> Request -> Eff '[Hyperbole, Concurrent, IOE] Response -> PendingConnection -> m () Source #
quickStartDocument :: ByteString -> ByteString Source #
A simple mobile-friendly document with all required embeds and live reload
liveAppquickStartDocument (routeRequestrouter)
routeRequest :: forall (es :: [Effect]) route. (Hyperbole :> es, Route route) => (route -> Eff es Response) -> Eff es Response Source #
Route URL patterns to different pages
type UserId = Int data AppRoute = Main | Messages | User UserId deriving (Eq, Generic) instanceRouteAppRoute where baseRoute = Just Main router :: (Hyperbole:> es) => AppRoute ->EffesResponserouter Messages =runPageMessages.page router (User cid) =runPage$ Users.page cid router Main = do pure $ view $ doel"click a link below to visit a page"routeMessages "Messages"route(User 1) "User 1"route(User 2) "User 2" app :: Application app =liveApp(document documentHead) (routeRequestrouter)