udp-streaming: Streaming to and from UDP socket

[ library, mit, network, streaming ] [ Propose Tags ]

Simple fire-and-forget udp Streaming components modelled after udp-conduit


[Skip to Readme]

Modules

[Index]

Downloads

Maintainer's Corner

Package maintainers

For package maintainers and hackage trustees

Candidates

Versions [RSS] 0.1.0.0, 0.1.0.1, 0.2.0.0
Dependencies base (>=4.6 && <5.0), bytestring (>=0.10 && <0.11), network (>=2.0 && <3), resourcet (>=1.2 && <2), streaming (>=0.2 && <0.3) [details]
License MIT
Copyright (c) 2018 Mihai Giurgeanu
Author Mihai Giurgeanu
Maintainer mihai.giurgeanu@gmail.com
Category Network, Streaming
Home page https://hub.darcs.net/mihaigiurgeanu/udp-streaming
Uploaded by mihaigiurgeanu at 2018-03-18T12:44:23Z
Distributions
Reverse Dependencies 1 direct, 0 indirect [details]
Downloads 1625 total (9 in the last 30 days)
Rating (no votes yet) [estimated by Bayesian average]
Your Rating
  • λ
  • λ
  • λ
Status Docs available [build log]
Last success reported on 2018-03-18 [all 1 reports]

Readme for udp-streaming-0.2.0.0

[back to package description]

udp-streaming

Simple fire and forget style streaming source and consumer in the spirit of the 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)