packages feed

zeromq4-haskell 0.4.1 → 0.5

raw patch · 6 files changed

+93/−20 lines, 6 filesdep +tasty-hunit

Dependencies added: tasty-hunit

Files

+ CHANGELOG.md view
@@ -0,0 +1,34 @@+0.5+-----------------------------------------------------------------------------+- bugfix release (#44, PR #47) which exposes `DontWait` flag on Windows+- exports `socketMonitor`+- `Eq`, `Typable` and `Generic` instances of socket types++0.4.1+-----------------------------------------------------------------------------+- adjust dependencies constraints++0.4+-----------------------------------------------------------------------------+- update `exceptions` and rework tests++0.3.2+-----------------------------------------------------------------------------+- adjust dependencies constraints++0.3.1+-----------------------------------------------------------------------------+- preliminary Windows support (#8)++0.3+-----------------------------------------------------------------------------+- remove `MonadCatchIO-transformers`+- use `pkg-config` (except on Windows)++0.2+-----------------------------------------------------------------------------+- add `disconnect`++0.1+-----------------------------------------------------------------------------+- initial release supporting 0MQ 4.x
src/System/ZMQ4.hs view
@@ -1,5 +1,7 @@-{-# LANGUAGE CPP   #-}-{-# LANGUAGE GADTs #-}+{-# LANGUAGE CPP                #-}+{-# LANGUAGE GADTs              #-}+{-# LANGUAGE DeriveDataTypeable #-}+{-# LANGUAGE DeriveGeneric      #-}  -- | -- Module      : System.ZMQ4@@ -60,7 +62,7 @@   , Size   , Context   , Socket-  , Flag              (SendMore)+  , Flag              (..)   , Switch            (..)   , Timeout   , Event             (..)@@ -84,6 +86,7 @@   , receiveMulti   , version   , monitor+  , socketMonitor   , poll    , System.ZMQ4.subscribe@@ -212,6 +215,7 @@ import Data.List.NonEmpty (NonEmpty) import Data.Restricted import Data.Traversable (forM)+import Data.Typeable import Foreign hiding (throwIf, throwIf_, throwIfNull, void) import Foreign.C.String import Foreign.C.Types (CInt, CShort)@@ -227,45 +231,46 @@ import qualified System.ZMQ4.Base     as B  import GHC.Conc (threadWaitRead, threadWaitWrite)+import GHC.Generics(Generic)  ----------------------------------------------------------------------------- -- Socket Types  -- | <http://api.zeromq.org/4-0:zmq-socket ZMQ_PAIR>-data Pair = Pair+data Pair = Pair deriving (Eq, Typeable, Generic)  -- | <http://api.zeromq.org/4-0:zmq-socket ZMQ_PUB>-data Pub = Pub+data Pub = Pub deriving (Eq, Typeable, Generic)  -- | <http://api.zeromq.org/4-0:zmq-socket ZMQ_SUB>-data Sub = Sub+data Sub = Sub deriving (Eq, Typeable, Generic)  -- | <http://api.zeromq.org/4-0:zmq-socket ZMQ_XPUB>-data XPub = XPub+data XPub = XPub deriving (Eq, Typeable, Generic)  -- | <http://api.zeromq.org/4-0:zmq-socket ZMQ_XSUB>-data XSub = XSub+data XSub = XSub deriving (Eq, Typeable, Generic)  -- | <http://api.zeromq.org/4-0:zmq-socket ZMQ_REQ>-data Req = Req+data Req = Req deriving (Eq, Typeable, Generic)  -- | <http://api.zeromq.org/4-0:zmq-socket ZMQ_REP>-data Rep = Rep+data Rep = Rep deriving (Eq, Typeable, Generic)  -- | <http://api.zeromq.org/4-0:zmq-socket ZMQ_DEALER>-data Dealer = Dealer+data Dealer = Dealer deriving (Eq, Typeable, Generic)  -- | <http://api.zeromq.org/4-0:zmq-socket ZMQ_ROUTER>-data Router = Router+data Router = Router deriving (Eq, Typeable, Generic)  -- | <http://api.zeromq.org/4-0:zmq-socket ZMQ_PULL>-data Pull = Pull+data Pull = Pull deriving (Eq, Typeable, Generic)  -- | <http://api.zeromq.org/4-0:zmq-socket ZMQ_PUSH>-data Push = Push+data Push = Push deriving (Eq, Typeable, Generic)  -- | <http://api.zeromq.org/4-0:zmq-socket ZMQ_STREAM>-data Stream = Stream+data Stream = Stream deriving (Eq, Typeable, Generic)  type XReq = Dealer {-# DEPRECATED XReq "Use Dealer" #-}@@ -790,7 +795,11 @@ send sock fls val = bracket (messageOf val) messageClose $ \m ->   onSocket "send" sock $ \s ->     retry "send" (waitWrite sock) $+#ifdef mingw32_HOST_OS+          c_zmq_sendmsg s (msgPtr m) (combineFlags fls)+#else           c_zmq_sendmsg s (msgPtr m) (combineFlags (DontWait : fls))+#endif  -- | Send the given 'LB.ByteString' over the socket -- (cf. <http://api.zeromq.org/4-0:zmq-sendmsg zmq_sendmsg>).@@ -806,7 +815,11 @@ send' sock fls val = bracket (messageOfLazy val) messageClose $ \m ->   onSocket "send'" sock $ \s ->     retry "send'" (waitWrite sock) $+#ifdef mingw32_HOST_OS+          c_zmq_sendmsg s (msgPtr m) (combineFlags fls)+#else           c_zmq_sendmsg s (msgPtr m) (combineFlags (DontWait : fls))+#endif  -- | Send a multi-part message. -- This function applies the 'SendMore' 'Flag' between all message parts.@@ -828,7 +841,11 @@ receive sock = bracket messageInit messageClose $ \m ->   onSocket "receive" sock $ \s -> do     retry "receive" (waitRead sock) $+#ifdef mingw32_HOST_OS+          c_zmq_recvmsg s (msgPtr m) 0+#else           c_zmq_recvmsg s (msgPtr m) (flagVal dontWait)+#endif     data_ptr <- c_zmq_msg_data (msgPtr m)     size     <- c_zmq_msg_size (msgPtr m)     SB.packCStringLen (data_ptr, fromIntegral size)@@ -873,7 +890,12 @@   where     next soc m False = messageClose m `finally` close soc >> return Nothing     next soc m True  = onSocket "recv" soc $ \s -> do-        retry "recv" (waitRead soc) $ c_zmq_recvmsg s (msgPtr m) (flagVal dontWait)+        retry "recv" (waitRead soc) $+#ifdef mingw32_HOST_OS+            c_zmq_recvmsg s (msgPtr m) 0+#else+            c_zmq_recvmsg s (msgPtr m) (flagVal dontWait)+#endif         ptr <- c_zmq_msg_data (msgPtr m)         evt <- peek ptr         str <- receive soc
src/System/ZMQ4/Internal.hs view
@@ -81,7 +81,7 @@  -- | Flags to apply on send operations (cf. man zmq_send) data Flag =-    DontWait -- ^ ZMQ_DONTWAIT+    DontWait -- ^ ZMQ_DONTWAIT (Only relevant on Windows.)   | SendMore -- ^ ZMQ_SNDMORE   deriving (Eq, Ord, Show) @@ -257,7 +257,7 @@         peek sPtr >>= \len -> peekA (bPtr, fromIntegral len)  getStrOpt :: Socket a -> ZMQOption -> IO String-getStrOpt = getCStrOpt peekCStringLen+getStrOpt = getCStrOpt (peekCString . fst)  getByteStringOpt :: Socket a -> ZMQOption -> IO SB.ByteString getByteStringOpt = getCStrOpt SB.packCStringLen
src/System/ZMQ4/Monadic.hs view
@@ -17,7 +17,7 @@   ( -- * Type Definitions     ZMQ   , Socket-  , Z.Flag              (SendMore)+  , Z.Flag              (..)   , Z.Switch            (..)   , Z.Timeout   , Z.Event             (..)@@ -79,6 +79,7 @@   , unsubscribe   , proxy   , monitor+  , socketMonitor   , Z.poll    -- * Socket Options (Read)@@ -348,6 +349,9 @@  monitor :: [Z.EventType] -> Socket z t -> ZMQ z (Bool -> IO (Maybe Z.EventMsg)) monitor es s = onContext $ \ctx -> Z.monitor es ctx (_unsocket s)++socketMonitor :: [Z.EventType] -> String -> Socket z t -> ZMQ z ()+socketMonitor es addr s = liftIO $ Z.socketMonitor es addr (_unsocket s)  -- * Socket Options (Read) 
tests/System/ZMQ4/Test/Properties.hs view
@@ -8,6 +8,7 @@ import Test.QuickCheck import Test.QuickCheck.Monadic (monadicIO, run) import Test.Tasty+import Test.Tasty.HUnit import Test.Tasty.QuickCheck  import Control.Applicative@@ -49,6 +50,7 @@     , testProperty "set;get socket option (Pull)"   (prop_set_get_socket_option Pull)     , testProperty "set;get socket option (Push)"   (prop_set_get_socket_option Push)     , testProperty "(un-)subscribe"                 (prop_subscribe Sub)+    , testCase     "last_enpoint"                   (last_endpoint)     , testGroup    "connect disconnect"         [ testProperty "" (prop_connect_disconnect x)             | x <- [ (AnySocket Rep, AnySocket Req)@@ -100,6 +102,15 @@   where     ieq :: (Integral i, Integral k) => i -> k -> Bool     ieq i k  = (fromIntegral i :: Int) == (fromIntegral k :: Int)++last_endpoint :: IO ()+last_endpoint = do+    let a = "tcp://127.0.0.1:43821"+    a' <- runZMQ $ do+        s <- socket Rep+        bind s a+        lastEndpoint s+    a @=? a'  prop_subscribe :: (Subscriber a, SocketType a) => a -> ByteString -> Property prop_subscribe t subs = monadicIO $ run $
zeromq4-haskell.cabal view
@@ -1,5 +1,5 @@ name:               zeromq4-haskell-version:            0.4.1+version:            0.5 synopsis:           Bindings to ZeroMQ 4.x category:           System, FFI license:            MIT@@ -14,6 +14,7 @@ build-type:         Simple extra-source-files:       README.md+    , CHANGELOG.md     , AUTHORS     , examples/*.hs     , examples/Makefile@@ -80,4 +81,5 @@         , bytestring         , QuickCheck       >= 2.6         , tasty            >= 0.8+        , tasty-hunit      >= 0.8         , tasty-quickcheck >= 0.8