packages feed

udp-streaming-0.2.0.0: README.md

udp-streaming
==============

Simple fire and forget style streaming source and consumer in the spirit
of the [udp-conduit](https://github.com/kqr/udp-conduit) package.

Here's an example run in ghci that sends e messages to UDP port 8888 on localhost,
from the port 3000 on the localhost:

    >>> import qualified Streaming.Prelude as S
    >>> import Control.Monad.Trans.Resource
    >>> import Streaming.UDP
    >>>
    >>> :set -XOverloadedStrings
    >>>
    >>> addr1 <- SockAddrInet 8888 <$> (inet_addr "127.0.0.1")
    >>>
    >>> runResourceT $ toUDP "127.0.0.1" 3000 $ S.zip (S.each ["hello", "world", "!"]) (S.repeat addr1)
    
Here's an example in ghci where we continuously receive messages with a 
maximum length of 500 bytes on port 8888 on localhost:

    >>> import qualified Streaming.Prelude as S
    >>> import Streaming.UDP
    >>> import Control.Monad.Trans.Resource
    >>> import qualified Data.ByteString as B 
    >>>
    >>>
    >>> runResourceT $ S.stdoutLn $ S.map (map (toEnum.fromEnum) . B.unpack) $ S.map fst $ fromUDP "127.0.0.1" 8888 500


Now, here's an example where we receive messages on port 8001, encode them as hex
digits (using base16-bytestring package), and then send them on to port 8002.

    >>> import qualified Streaming.Prelude as S
    >>> import Streaming.UDP
    >>> import Data.ByteString.Base16 (encode)
    >>> import Control.Monad.Trans.Resource
    >>>
    >>> addr2 <- SockAddrInet 8002 <$> (inet_addr "127.0.0.1")
    >>>
    >>> runResourceT $ toUDP "127.0.0.1" 8002 $ S.zip (S.map encode $ S.map fst $ fromUDP "127.0.0.1" 8001 500) (S.repeat addr2)

Or you could, in the previous example, to also log the messages receved, before processing and
send them further:

    >>> runResourceT $ toUDP "127.0.0.1" 3000 $ S.zip (S.map encode $ S.map fst $ S.print $ S.copy $ fromUDP "127.0.0.1" 8001 500) (S.repeat addr2)