packages feed

udp-conduit (empty) → 0.1.0.0

raw patch · 5 files changed

+136/−0 lines, 5 filesdep +basedep +chunked-datadep +conduit-combinatorssetup-changed

Dependencies added: base, chunked-data, conduit-combinators, mono-traversable, network

Files

+ LICENSE view
@@ -0,0 +1,13 @@+Copyright (c) kqr 2016++Permission to use, copy, modify, and/or distribute this software for any+purpose with or without fee is hereby granted, provided that the above+copyright notice and this permission notice appear in all copies.++THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH+REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND+FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,+INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM+LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR+OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR+PERFORMANCE OF THIS SOFTWARE.
+ README.md view
@@ -0,0 +1,38 @@+# udp-conduit++Simple fire-and-forget style conduit parts (sources/sinks) for UDP traffic.++Here's an example that sends a message to UDP port 8888 on localhost:++    import Conduit+    import Conduit.UDP+    import Data.Text++    message :: Text+    message = "hello, world!\n"++    main :: IO ()+    main =+        runConduitRes (yield message .| encodeUtf8C .| udpSink "127.0.0.1" 8888)++Here's an example where we continuously receive messages on port 5666 on localhost:++    import Conduit+    import Conduit.UDP++    main :: IO ()+    main =+        runConduitRes (udpSource "127.0.0.1" 5666 .| decodeUtf8C .| stdoutC)++Now, here's an example where we receive messages on port 8001, transform them to+upper-case, and then send them on to port 8002.++    import Conduit+    import Conduit.UDP+    import Data.Char (toUpper)++    main :: IO ()+    main =+        runConduitRes (udpSource "127.0.0.1" 8001 .| omapCE toUpper .| udpSink "127.0.0.1" 8002)++Fun, huh? And simple!
+ Setup.hs view
@@ -0,0 +1,2 @@+import Distribution.Simple+main = defaultMain
+ src/Conduit/UDP.hs view
@@ -0,0 +1,52 @@+module Conduit.UDP where+import Data.Void (Void)+import Data.IOData (IOData)+import Data.MonoTraversable (MonoFoldable)+import System.IO (IOMode(ReadMode, WriteMode), Handle)+import Network.Socket (Socket, SockAddr(SockAddrInet), PortNumber, setSocketOption, socketToHandle)+import qualified Network.Socket as Socket+import Conduit (ConduitM, MonadResource, sinkIOHandle, sourceIOHandle)+++data SocketType+    = SourceSocket+    | SinkSocket++ioMode :: SocketType -> IOMode+ioMode socketType =+    case socketType of+        SourceSocket -> ReadMode+        SinkSocket -> WriteMode++socketMode :: SocketType -> Socket -> SockAddr -> IO ()+socketMode socketType =+    case socketType of+        SourceSocket -> Socket.bind+        SinkSocket -> Socket.connect+++udpSink+    :: (MonadResource m, IOData a)+    => Prelude.String+    -> PortNumber+    -> ConduitM a Void m ()+udpSink host port =+    sinkIOHandle (udpHandle host port SinkSocket)+++udpSource+    :: (MonadResource m, IOData a, MonoFoldable a)+    => Prelude.String+    -> PortNumber+    -> ConduitM () a m ()+udpSource host port =+    sourceIOHandle (udpHandle host port SourceSocket)+++udpHandle :: Prelude.String -> PortNumber -> SocketType -> IO Handle+udpHandle host port socketType = do+    socket <- Socket.socket Socket.AF_INET Socket.Datagram Socket.defaultProtocol+    setSocketOption socket Socket.ReusePort 1+    address <- Socket.inet_addr host+    socketMode socketType socket (SockAddrInet port address)+    socketToHandle socket (ioMode socketType)
+ udp-conduit.cabal view
@@ -0,0 +1,31 @@+name:                udp-conduit+version:             0.1.0.0+synopsis:            Simple fire-and-forget conduit UDP wrappers+description:+    `udp-conduit` provides simple wrappers to get fire-and-forget UDP sinks+    and sources.+homepage:            https://github.com/kqr/udp-conduit#readme+license:             ISC+license-file:        LICENSE+author:              kqr+maintainer:          k@rdw.se+copyright:           (c) 2016 kqr+category:            Data, Conduit+build-type:          Simple+extra-source-files:  README.md+cabal-version:       >=1.10++library+  hs-source-dirs:      src+  ghc-options:         -Wall+  exposed-modules:     Conduit.UDP+  build-depends:       base >= 4.7 && < 5+                     , mono-traversable+                     , chunked-data+                     , network+                     , conduit-combinators+  default-language:    Haskell2010++source-repository head+  type:     git+  location: https://github.com/kqr/udp-conduit