box-socket-0.5.1.0: Box websockets
Safe HaskellSafe-Inferred
LanguageGHC2021

Box.Websocket.Example

Description

It's a box. It's a websocket. It's an example.

Synopsis

Documentation

>>> :set -XOverloadedStrings
>>> import Box
>>> import Box.Websocket.Example
>>> import Control.Concurrent.Async

senderExample :: [Text] -> IO [Text] Source #

A server that only sends and a client that only receives.

>>> senderExample ["a","b"]
["a","b"]

echoExample :: [Text] -> IO [Text] Source #

echo server example

>>> echoExample ["a","b","c"]
["echo: a","echo: b","echo: c"]

echoLogExample :: [Text] -> IO ([Text], [Text]) Source #

echo server example, with event logging.

The order of events is non-deterministic, so this is a rough guide:

echoLogExample ["a","b","c"]

(["echo: a","echo: b","echo: c"],["client:sender_:emit:Just "a"","client:sender_:sendTextData:Right ()","client:sender_:emit:Just "b"","client:sender_:sendTextData:Right ()","client:sender_:emit:Just "c"","client:sender_:sendTextData:Right ()","client:sender_:emit:Nothing","client:sender_ closed with SocketOpen","server:receiver_:receiveData:Right "a"","server:receiver_:receiveData:Right "b"","server:receiver_:receiveData:Right "c"","server:sender_:emit:Just "echo: a"","server:sender_:sendTextData:Right ()","server:sender_:emit:Just "echo: b"","server:sender_:sendTextData:Right ()","server:sender_:emit:Just "echo: c"","server:sender_:sendTextData:Right ()","client:receiver_:receiveData:Right "echo: a"","client:receiver_:receiveData:Right "echo: b"","client:receiver_:receiveData:Right "echo: c"","server:receiver_:receiveData:Left (CloseRequest 1000 "close after sending")","server:receiver_ closed","client:receiver_:receiveData:Left (CloseRequest 1000 "close after sending")","client:receiver_ closed","client:duplex_ closed","server:duplex_ closed"])

clientIO :: IO () Source #

"q" to close the client, reads and writes from std

>>> clientIO
*** Exception: Network.Socket.connect: <socket: ...>: does not exist (Connection refused)

serverIO :: IO () Source #

"q" to close a client socket down. Ctrl-c to close the server. Reads and writes from std.

>>> a <- async serverIO
>>> serverIO
*** Exception: Network.Socket.bind: resource busy (Address already in use)
>>> cancel a