diff --git a/examples/EchoClient.hs b/examples/EchoClient.hs new file mode 100644 index 0000000..e77d580 --- /dev/null +++ b/examples/EchoClient.hs @@ -0,0 +1,36 @@ +module Main (main) where + +import Data.Function ((&)) +import Data.Word (Word8) +import Network.Socket (PortNumber) +import Streamly.Data.Stream.Prelude (Stream) + +import qualified Streamly.Console.Stdio as Stdio +import qualified Streamly.Data.Array as Array +import qualified Streamly.Data.Fold as Fold +import qualified Streamly.Data.Stream.Prelude as Stream +import qualified Streamly.Internal.Network.Inet.TCP as TCP +import qualified Streamly.Unicode.Stream as Unicode + + +remoteAddr :: (Word8,Word8,Word8,Word8) +remoteAddr = (127, 0, 0, 1) + +remotePort :: PortNumber +remotePort = 8091 + +echo :: Stream IO () +echo = + Stream.unfold Stdio.reader () -- Stream IO Word8 + & split (== 10) Array.write -- Stream IO (Array Word8) + & TCP.pipeChunks remoteAddr remotePort -- Stream IO (Array Word8) + & Stream.unfoldMany Array.reader -- Stream IO Word8 + & Unicode.decodeLatin1 -- Stream IO Char + & Stream.mapM putChar -- Stream IO () + + where + + split p f = Stream.foldMany (Fold.takeEndBy p f) + +main :: IO () +main = Stream.fold Fold.drain echo diff --git a/streamly-examples.cabal b/streamly-examples.cabal index d584f41..9cd0f3b 100644 --- a/streamly-examples.cabal +++ b/streamly-examples.cabal @@ -239,6 +239,14 @@ executable EchoServer else buildable: False +executable EchoClient + import: exe-options-threaded + main-is: EchoClient.hs + if !impl(ghcjs) + buildable: True + else + buildable: False + executable FileSender import: exe-options-threaded main-is: FileSender.hs