Skip to content

Latest commit

 

History

History
31 lines (23 loc) · 1.15 KB

README.md

File metadata and controls

31 lines (23 loc) · 1.15 KB

wai-braid

braid protocol server in haskell, implemented as wai middleware

my writeup on the braid protocol

Usage

{-# LANGUAGE OverloadedStrings #-}
module Main where

import Network.Wai.Middleware.Braid (braidify, streamUpdates, hasSubscription, status209, Update)
import Network.Wai
import Control.Concurrent.Chan (Chan, newChan)
import Network.Wai.Handler.Warp (run)
import Network.HTTP.Types.Status (status200)
    
application src req respond = respond $ 
    if hasSubscription req 
    then responseStream status209 [("Content-Type", "text/plain")] $ streamUpdates src ["topic"] (Nothing)
    else responseLBS status200 [("Content-Type", "text/plain")] "Hello World"

{-| 
    instead of Nothing we can have (Just client), where client = lookupHeader "Client" $ requestHeaders req, the client field is for preventing echo updates by clients subscribing and sending updates -}

main :: IO ()
main = newChan >>= \src -> run 3000 $ braidify src $ application src

example tests in cURL

curl output