ws-chans: Unagi chan based websocket client

[ bsd3, library, network ] [ Propose Tags ] [ Report a vulnerability ]

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


[Skip to Readme]

Modules

[Index]

Downloads

Maintainer's Corner

Package maintainers

For package maintainers and hackage trustees

Candidates

  • No Candidates
Versions [RSS] 0.1.0.0
Dependencies async, base (>=4.7 && <5), network, unagi-chan (>=0.4), websockets [details]
License BSD-3-Clause
Copyright 2017 David Smith
Author David Smith
Maintainer david.smith@keemail.me
Category Network
Home page https://github.com/shmish111/ws-chans
Source repo head: git clone https://github.com/shmish111/ws-chans
Uploaded by shmish111 at 2017-04-09T21:59:21Z
Distributions NixOS:0.1.0.0
Reverse Dependencies 1 direct, 0 indirect [details]
Downloads 987 total (5 in the last 30 days)
Rating (no votes yet) [estimated by Bayesian average]
Your Rating
  • λ
  • λ
  • λ
Status Docs available [build log]
Last success reported on 2017-04-09 [all 1 reports]

Readme for ws-chans-0.1.0.0

[back to package description]

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.