MyNixOS website logo
Description

Unagi chan based websocket client.

Use Control.Concurrent.Chan.Unagi as an interface to a websocket server

ws-chans

Build Status

Websockets represent a channel between a client and a server. ws-chans carries this concept deeper into your code by setting up an Control.Concurrent.Chan.Unagi.InChan and an Control.Concurrent.Chan.Unagi.OutChan as an interface to a websocket server. To send a message to the server you simply write a message to the InChan. To receive a message from the server you read from the OutChan.

The tests are probably the best place to look at some example usage but basically:

import           Control.Monad                        (forM, forever)
import           Data.Text                            (Text)
import           Network.WebSockets.Chan.Unagi        as Unagi

example :: IO [Text]
example = do
    (ic, oc, cic) <- Unagi.newChans "localhost" 8080 "" :: IO (Unagi.InChan Text, Unagi.OutChan Text, Unagi.InChan Text)
    Unagi.writeList2Chan ic msgs
    res <- forM msgs (\_ -> Unagi.readChan oc)
    Unagi.writeChan cic ("finished" :: Text)
    return res

newChans returns a tuple of:

  • an InChan which you write messages to, these will be sent to the websocket server
  • an OutChan which you read messages from, these are messages that have come from the websocket server
  • an InChan for closing the connection. This should have the same type as the first InChan. When you write a message to this InChan it will tell the server that you wish to close the connection. See the source code and Network.WebSockets.sendClose for more information on how this works.
Metadata

Version

0.1.0.0

Platforms (77)

    Darwin
    FreeBSD
    Genode
    GHCJS
    Linux
    MMIXware
    NetBSD
    none
    OpenBSD
    Redox
    Solaris
    WASI
    Windows
Show all
  • aarch64-darwin
  • aarch64-freebsd
  • aarch64-genode
  • aarch64-linux
  • aarch64-netbsd
  • aarch64-none
  • aarch64-windows
  • aarch64_be-none
  • arm-none
  • armv5tel-linux
  • armv6l-linux
  • armv6l-netbsd
  • armv6l-none
  • armv7a-darwin
  • armv7a-linux
  • armv7a-netbsd
  • armv7l-linux
  • armv7l-netbsd
  • avr-none
  • i686-cygwin
  • i686-darwin
  • i686-freebsd
  • i686-genode
  • i686-linux
  • i686-netbsd
  • i686-none
  • i686-openbsd
  • i686-windows
  • javascript-ghcjs
  • loongarch64-linux
  • m68k-linux
  • m68k-netbsd
  • m68k-none
  • microblaze-linux
  • microblaze-none
  • microblazeel-linux
  • microblazeel-none
  • mips-linux
  • mips-none
  • mips64-linux
  • mips64-none
  • mips64el-linux
  • mipsel-linux
  • mipsel-netbsd
  • mmix-mmixware
  • msp430-none
  • or1k-none
  • powerpc-netbsd
  • powerpc-none
  • powerpc64-linux
  • powerpc64le-linux
  • powerpcle-none
  • riscv32-linux
  • riscv32-netbsd
  • riscv32-none
  • riscv64-linux
  • riscv64-netbsd
  • riscv64-none
  • rx-none
  • s390-linux
  • s390-none
  • s390x-linux
  • s390x-none
  • vc4-none
  • wasm32-wasi
  • wasm64-wasi
  • x86_64-cygwin
  • x86_64-darwin
  • x86_64-freebsd
  • x86_64-genode
  • x86_64-linux
  • x86_64-netbsd
  • x86_64-none
  • x86_64-openbsd
  • x86_64-redox
  • x86_64-solaris
  • x86_64-windows