-------------------------------------------------------------------------------- {-# LANGUAGE OverloadedStrings #-} module Main ( main ) where -------------------------------------------------------------------------------- import Control.Concurrent (forkIO) import Control.Monad (forever, unless) import Control.Monad.Trans (liftIO) import Network.Socket (withSocketsDo) import Data.Text (Text) import qualified Data.Text as T import qualified Data.Text.IO as T import qualified Network.WebSockets as WS -------------------------------------------------------------------------------- app :: WS.ClientApp () app conn = do putStrLn "Connected!" -- Fork a thread that writes WS data to stdout _ <- forkIO $ forever $ do msg <- WS.receiveData conn liftIO $ T.putStrLn msg -- Read from stdin and write to WS let loop = do line <- T.getLine unless (T.null line) $ WS.sendTextData conn line >> loop loop WS.sendClose conn ("Bye!" :: Text) -------------------------------------------------------------------------------- main :: IO () main = withSocketsDo $ WS.runClient "echo.websocket.org" 80 "/" app