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)