{-# LANGUAGE CPP #-}
{-# LANGUAGE GADTs #-}
{-# LANGUAGE DeriveDataTypeable #-}
{-# LANGUAGE DeriveGeneric #-}
module System.ZMQ4
(
Pair (..)
, Pub (..)
, Sub (..)
, XPub (..)
, XSub (..)
, Req (..)
, Rep (..)
, Dealer (..)
, Router (..)
, XReq
, XRep
, Pull (..)
, Push (..)
, Stream (..)
, SocketType
, Sender
, Receiver
, Subscriber
, SocketLike
, Conflatable
, SendProbe
, Size
, Context
, Socket
, Flag (..)
, Switch (..)
, Timeout
, Event (..)
, EventType (..)
, EventMsg (..)
, Poll (..)
, KeyFormat (..)
, SecurityMechanism (..)
, withContext
, withSocket
, bind
, unbind
, connect
, disconnect
, send
, send'
, sendMulti
, receive
, receiveMulti
, version
, monitor
, socketMonitor
, poll
, System.ZMQ4.subscribe
, System.ZMQ4.unsubscribe
, ioThreads
, maxSockets
, setIoThreads
, setMaxSockets
, System.ZMQ4.affinity
, System.ZMQ4.backlog
, System.ZMQ4.conflate
, System.ZMQ4.curvePublicKey
, System.ZMQ4.curveSecretKey
, System.ZMQ4.curveServerKey
, System.ZMQ4.delayAttachOnConnect
, System.ZMQ4.events
, System.ZMQ4.fileDescriptor
, System.ZMQ4.identity
, System.ZMQ4.immediate
, System.ZMQ4.ipv4Only
, System.ZMQ4.ipv6
, System.ZMQ4.lastEndpoint
, System.ZMQ4.linger
, System.ZMQ4.maxMessageSize
, System.ZMQ4.mcastHops
, System.ZMQ4.mechanism
, System.ZMQ4.moreToReceive
, System.ZMQ4.plainServer
, System.ZMQ4.plainPassword
, System.ZMQ4.plainUserName
, System.ZMQ4.rate
, System.ZMQ4.receiveBuffer
, System.ZMQ4.receiveHighWM
, System.ZMQ4.receiveTimeout
, System.ZMQ4.reconnectInterval
, System.ZMQ4.reconnectIntervalMax
, System.ZMQ4.recoveryInterval
, System.ZMQ4.sendBuffer
, System.ZMQ4.sendHighWM
, System.ZMQ4.sendTimeout
, System.ZMQ4.tcpKeepAlive
, System.ZMQ4.tcpKeepAliveCount
, System.ZMQ4.tcpKeepAliveIdle
, System.ZMQ4.tcpKeepAliveInterval
, System.ZMQ4.zapDomain
, setAffinity
, setBacklog
, setConflate
, setCurveServer
, setCurvePublicKey
, setCurveSecretKey
, setCurveServerKey
, setDelayAttachOnConnect
, setIdentity
, setImmediate
, setIpv4Only
, setIpv6
, setLinger
, setMaxMessageSize
, setMcastHops
, setPlainServer
, setPlainPassword
, setPlainUserName
, setProbeRouter
, setRate
, setReceiveBuffer
, setReceiveHighWM
, setReceiveTimeout
, setReconnectInterval
, setReconnectIntervalMax
, setRecoveryInterval
, setReqCorrelate
, setReqRelaxed
, setRouterMandatory
, setSendBuffer
, setSendHighWM
, setSendTimeout
, setTcpAcceptFilter
, setTcpKeepAlive
, setTcpKeepAliveCount
, setTcpKeepAliveIdle
, setTcpKeepAliveInterval
, setXPubVerbose
, setZapDomain
, Data.Restricted.restrict
, Data.Restricted.toRestricted
, ZMQError
, errno
, source
, message
, init
, term
, shutdown
, context
, socket
, close
, waitRead
, waitWrite
, z85Encode
, z85Decode
, proxy
, curveKeyPair
) where
import Control.Applicative
import Control.Exception
import Control.Monad (unless)
import Control.Monad.IO.Class
import Data.List (intersect, foldl')
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)
import System.Posix.Types (Fd(..))
import System.ZMQ4.Internal
import System.ZMQ4.Internal.Base
import System.ZMQ4.Internal.Error
import Prelude hiding (init)
import qualified Data.ByteString as SB
import qualified Data.ByteString.Lazy as LB
import qualified Data.List.NonEmpty as S
import qualified Prelude as P
import qualified System.ZMQ4.Internal.Base as B
import GHC.Conc (threadWaitRead)
import GHC.Generics(Generic)
data Pair = Pair deriving (Pair -> Pair -> Bool
(Pair -> Pair -> Bool) -> (Pair -> Pair -> Bool) -> Eq Pair
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Pair -> Pair -> Bool
$c/= :: Pair -> Pair -> Bool
== :: Pair -> Pair -> Bool
$c== :: Pair -> Pair -> Bool
Eq, Typeable, (forall x. Pair -> Rep Pair x)
-> (forall x. Rep Pair x -> Pair) -> Generic Pair
forall x. Rep Pair x -> Pair
forall x. Pair -> Rep Pair x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep Pair x -> Pair
$cfrom :: forall x. Pair -> Rep Pair x
Generic)
data Pub = Pub deriving (Pub -> Pub -> Bool
(Pub -> Pub -> Bool) -> (Pub -> Pub -> Bool) -> Eq Pub
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Pub -> Pub -> Bool
$c/= :: Pub -> Pub -> Bool
== :: Pub -> Pub -> Bool
$c== :: Pub -> Pub -> Bool
Eq, Typeable, (forall x. Pub -> Rep Pub x)
-> (forall x. Rep Pub x -> Pub) -> Generic Pub
forall x. Rep Pub x -> Pub
forall x. Pub -> Rep Pub x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep Pub x -> Pub
$cfrom :: forall x. Pub -> Rep Pub x
Generic)
data Sub = Sub deriving (Sub -> Sub -> Bool
(Sub -> Sub -> Bool) -> (Sub -> Sub -> Bool) -> Eq Sub
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Sub -> Sub -> Bool
$c/= :: Sub -> Sub -> Bool
== :: Sub -> Sub -> Bool
$c== :: Sub -> Sub -> Bool
Eq, Typeable, (forall x. Sub -> Rep Sub x)
-> (forall x. Rep Sub x -> Sub) -> Generic Sub
forall x. Rep Sub x -> Sub
forall x. Sub -> Rep Sub x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep Sub x -> Sub
$cfrom :: forall x. Sub -> Rep Sub x
Generic)
data XPub = XPub deriving (XPub -> XPub -> Bool
(XPub -> XPub -> Bool) -> (XPub -> XPub -> Bool) -> Eq XPub
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: XPub -> XPub -> Bool
$c/= :: XPub -> XPub -> Bool
== :: XPub -> XPub -> Bool
$c== :: XPub -> XPub -> Bool
Eq, Typeable, (forall x. XPub -> Rep XPub x)
-> (forall x. Rep XPub x -> XPub) -> Generic XPub
forall x. Rep XPub x -> XPub
forall x. XPub -> Rep XPub x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep XPub x -> XPub
$cfrom :: forall x. XPub -> Rep XPub x
Generic)
data XSub = XSub deriving (XSub -> XSub -> Bool
(XSub -> XSub -> Bool) -> (XSub -> XSub -> Bool) -> Eq XSub
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: XSub -> XSub -> Bool
$c/= :: XSub -> XSub -> Bool
== :: XSub -> XSub -> Bool
$c== :: XSub -> XSub -> Bool
Eq, Typeable, (forall x. XSub -> Rep XSub x)
-> (forall x. Rep XSub x -> XSub) -> Generic XSub
forall x. Rep XSub x -> XSub
forall x. XSub -> Rep XSub x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep XSub x -> XSub
$cfrom :: forall x. XSub -> Rep XSub x
Generic)
data Req = Req deriving (Req -> Req -> Bool
(Req -> Req -> Bool) -> (Req -> Req -> Bool) -> Eq Req
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Req -> Req -> Bool
$c/= :: Req -> Req -> Bool
== :: Req -> Req -> Bool
$c== :: Req -> Req -> Bool
Eq, Typeable, (forall x. Req -> Rep Req x)
-> (forall x. Rep Req x -> Req) -> Generic Req
forall x. Rep Req x -> Req
forall x. Req -> Rep Req x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep Req x -> Req
$cfrom :: forall x. Req -> Rep Req x
Generic)
data Rep = Rep deriving (Rep -> Rep -> Bool
(Rep -> Rep -> Bool) -> (Rep -> Rep -> Bool) -> Eq Rep
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Rep -> Rep -> Bool
$c/= :: Rep -> Rep -> Bool
== :: Rep -> Rep -> Bool
$c== :: Rep -> Rep -> Bool
Eq, Typeable, (forall x. Rep -> Rep Rep x)
-> (forall x. Rep Rep x -> Rep) -> Generic Rep
forall x. Rep Rep x -> Rep
forall x. Rep -> Rep Rep x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep Rep x -> Rep
$cfrom :: forall x. Rep -> Rep Rep x
Generic)
data Dealer = Dealer deriving (Dealer -> Dealer -> Bool
(Dealer -> Dealer -> Bool)
-> (Dealer -> Dealer -> Bool) -> Eq Dealer
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Dealer -> Dealer -> Bool
$c/= :: Dealer -> Dealer -> Bool
== :: Dealer -> Dealer -> Bool
$c== :: Dealer -> Dealer -> Bool
Eq, Typeable, (forall x. Dealer -> Rep Dealer x)
-> (forall x. Rep Dealer x -> Dealer) -> Generic Dealer
forall x. Rep Dealer x -> Dealer
forall x. Dealer -> Rep Dealer x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep Dealer x -> Dealer
$cfrom :: forall x. Dealer -> Rep Dealer x
Generic)
data Router = Router deriving (Router -> Router -> Bool
(Router -> Router -> Bool)
-> (Router -> Router -> Bool) -> Eq Router
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Router -> Router -> Bool
$c/= :: Router -> Router -> Bool
== :: Router -> Router -> Bool
$c== :: Router -> Router -> Bool
Eq, Typeable, (forall x. Router -> Rep Router x)
-> (forall x. Rep Router x -> Router) -> Generic Router
forall x. Rep Router x -> Router
forall x. Router -> Rep Router x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep Router x -> Router
$cfrom :: forall x. Router -> Rep Router x
Generic)
data Pull = Pull deriving (Pull -> Pull -> Bool
(Pull -> Pull -> Bool) -> (Pull -> Pull -> Bool) -> Eq Pull
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Pull -> Pull -> Bool
$c/= :: Pull -> Pull -> Bool
== :: Pull -> Pull -> Bool
$c== :: Pull -> Pull -> Bool
Eq, Typeable, (forall x. Pull -> Rep Pull x)
-> (forall x. Rep Pull x -> Pull) -> Generic Pull
forall x. Rep Pull x -> Pull
forall x. Pull -> Rep Pull x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep Pull x -> Pull
$cfrom :: forall x. Pull -> Rep Pull x
Generic)
data Push = Push deriving (Push -> Push -> Bool
(Push -> Push -> Bool) -> (Push -> Push -> Bool) -> Eq Push
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Push -> Push -> Bool
$c/= :: Push -> Push -> Bool
== :: Push -> Push -> Bool
$c== :: Push -> Push -> Bool
Eq, Typeable, (forall x. Push -> Rep Push x)
-> (forall x. Rep Push x -> Push) -> Generic Push
forall x. Rep Push x -> Push
forall x. Push -> Rep Push x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep Push x -> Push
$cfrom :: forall x. Push -> Rep Push x
Generic)
data Stream = Stream deriving (Stream -> Stream -> Bool
(Stream -> Stream -> Bool)
-> (Stream -> Stream -> Bool) -> Eq Stream
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Stream -> Stream -> Bool
$c/= :: Stream -> Stream -> Bool
== :: Stream -> Stream -> Bool
$c== :: Stream -> Stream -> Bool
Eq, Typeable, (forall x. Stream -> Rep Stream x)
-> (forall x. Rep Stream x -> Stream) -> Generic Stream
forall x. Rep Stream x -> Stream
forall x. Stream -> Rep Stream x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep Stream x -> Stream
$cfrom :: forall x. Stream -> Rep Stream x
Generic)
type XReq = Dealer
{-# DEPRECATED XReq "Use Dealer" #-}
type XRep = Router
{-# DEPRECATED XRep "Use Router" #-}
class Subscriber a
class Sender a
class Receiver a
class Conflatable a
class SendProbe a
instance SocketType Pair where zmqSocketType :: Pair -> ZMQSocketType
zmqSocketType = ZMQSocketType -> Pair -> ZMQSocketType
forall a b. a -> b -> a
const ZMQSocketType
pair
instance Sender Pair
instance Receiver Pair
instance SocketType Pub where zmqSocketType :: Pub -> ZMQSocketType
zmqSocketType = ZMQSocketType -> Pub -> ZMQSocketType
forall a b. a -> b -> a
const ZMQSocketType
pub
instance Sender Pub
instance Conflatable Pub
instance SocketType Sub where zmqSocketType :: Sub -> ZMQSocketType
zmqSocketType = ZMQSocketType -> Sub -> ZMQSocketType
forall a b. a -> b -> a
const ZMQSocketType
sub
instance Subscriber Sub
instance Receiver Sub
instance Conflatable Sub
instance SocketType XPub where zmqSocketType :: XPub -> ZMQSocketType
zmqSocketType = ZMQSocketType -> XPub -> ZMQSocketType
forall a b. a -> b -> a
const ZMQSocketType
xpub
instance Sender XPub
instance Receiver XPub
instance SocketType XSub where zmqSocketType :: XSub -> ZMQSocketType
zmqSocketType = ZMQSocketType -> XSub -> ZMQSocketType
forall a b. a -> b -> a
const ZMQSocketType
xsub
instance Sender XSub
instance Receiver XSub
instance SocketType Req where zmqSocketType :: Req -> ZMQSocketType
zmqSocketType = ZMQSocketType -> Req -> ZMQSocketType
forall a b. a -> b -> a
const ZMQSocketType
request
instance Sender Req
instance Receiver Req
instance SendProbe Req
instance SocketType Rep where zmqSocketType :: Rep -> ZMQSocketType
zmqSocketType = ZMQSocketType -> Rep -> ZMQSocketType
forall a b. a -> b -> a
const ZMQSocketType
response
instance Sender Rep
instance Receiver Rep
instance SocketType Dealer where zmqSocketType :: Dealer -> ZMQSocketType
zmqSocketType = ZMQSocketType -> Dealer -> ZMQSocketType
forall a b. a -> b -> a
const ZMQSocketType
dealer
instance Sender Dealer
instance Receiver Dealer
instance Conflatable Dealer
instance SendProbe Dealer
instance SocketType Router where zmqSocketType :: Router -> ZMQSocketType
zmqSocketType = ZMQSocketType -> Router -> ZMQSocketType
forall a b. a -> b -> a
const ZMQSocketType
router
instance Sender Router
instance Receiver Router
instance SendProbe Router
instance SocketType Pull where zmqSocketType :: Pull -> ZMQSocketType
zmqSocketType = ZMQSocketType -> Pull -> ZMQSocketType
forall a b. a -> b -> a
const ZMQSocketType
pull
instance Receiver Pull
instance Conflatable Pull
instance SocketType Push where zmqSocketType :: Push -> ZMQSocketType
zmqSocketType = ZMQSocketType -> Push -> ZMQSocketType
forall a b. a -> b -> a
const ZMQSocketType
push
instance Sender Push
instance Conflatable Push
instance SocketType Stream where zmqSocketType :: Stream -> ZMQSocketType
zmqSocketType = ZMQSocketType -> Stream -> ZMQSocketType
forall a b. a -> b -> a
const ZMQSocketType
stream
instance Sender Stream
instance Receiver Stream
data Event =
In
| Out
| Err
deriving (Event -> Event -> Bool
(Event -> Event -> Bool) -> (Event -> Event -> Bool) -> Eq Event
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Event -> Event -> Bool
$c/= :: Event -> Event -> Bool
== :: Event -> Event -> Bool
$c== :: Event -> Event -> Bool
Eq, Eq Event
Eq Event =>
(Event -> Event -> Ordering)
-> (Event -> Event -> Bool)
-> (Event -> Event -> Bool)
-> (Event -> Event -> Bool)
-> (Event -> Event -> Bool)
-> (Event -> Event -> Event)
-> (Event -> Event -> Event)
-> Ord Event
Event -> Event -> Bool
Event -> Event -> Ordering
Event -> Event -> Event
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: Event -> Event -> Event
$cmin :: Event -> Event -> Event
max :: Event -> Event -> Event
$cmax :: Event -> Event -> Event
>= :: Event -> Event -> Bool
$c>= :: Event -> Event -> Bool
> :: Event -> Event -> Bool
$c> :: Event -> Event -> Bool
<= :: Event -> Event -> Bool
$c<= :: Event -> Event -> Bool
< :: Event -> Event -> Bool
$c< :: Event -> Event -> Bool
compare :: Event -> Event -> Ordering
$ccompare :: Event -> Event -> Ordering
$cp1Ord :: Eq Event
Ord, ReadPrec [Event]
ReadPrec Event
Int -> ReadS Event
ReadS [Event]
(Int -> ReadS Event)
-> ReadS [Event]
-> ReadPrec Event
-> ReadPrec [Event]
-> Read Event
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [Event]
$creadListPrec :: ReadPrec [Event]
readPrec :: ReadPrec Event
$creadPrec :: ReadPrec Event
readList :: ReadS [Event]
$creadList :: ReadS [Event]
readsPrec :: Int -> ReadS Event
$creadsPrec :: Int -> ReadS Event
Read, Int -> Event -> ShowS
[Event] -> ShowS
Event -> String
(Int -> Event -> ShowS)
-> (Event -> String) -> ([Event] -> ShowS) -> Show Event
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Event] -> ShowS
$cshowList :: [Event] -> ShowS
show :: Event -> String
$cshow :: Event -> String
showsPrec :: Int -> Event -> ShowS
$cshowsPrec :: Int -> Event -> ShowS
Show)
data Poll s m where
Sock :: s t -> [Event] -> Maybe ([Event] -> m ()) -> Poll s m
File :: Fd -> [Event] -> Maybe ([Event] -> m ()) -> Poll s m
version :: IO (Int, Int, Int)
version :: IO (Int, Int, Int)
version =
CInt -> (Ptr CInt -> IO (Int, Int, Int)) -> IO (Int, Int, Int)
forall a b. Storable a => a -> (Ptr a -> IO b) -> IO b
with 0 ((Ptr CInt -> IO (Int, Int, Int)) -> IO (Int, Int, Int))
-> (Ptr CInt -> IO (Int, Int, Int)) -> IO (Int, Int, Int)
forall a b. (a -> b) -> a -> b
$ \major_ptr :: Ptr CInt
major_ptr ->
CInt -> (Ptr CInt -> IO (Int, Int, Int)) -> IO (Int, Int, Int)
forall a b. Storable a => a -> (Ptr a -> IO b) -> IO b
with 0 ((Ptr CInt -> IO (Int, Int, Int)) -> IO (Int, Int, Int))
-> (Ptr CInt -> IO (Int, Int, Int)) -> IO (Int, Int, Int)
forall a b. (a -> b) -> a -> b
$ \minor_ptr :: Ptr CInt
minor_ptr ->
CInt -> (Ptr CInt -> IO (Int, Int, Int)) -> IO (Int, Int, Int)
forall a b. Storable a => a -> (Ptr a -> IO b) -> IO b
with 0 ((Ptr CInt -> IO (Int, Int, Int)) -> IO (Int, Int, Int))
-> (Ptr CInt -> IO (Int, Int, Int)) -> IO (Int, Int, Int)
forall a b. (a -> b) -> a -> b
$ \patch_ptr :: Ptr CInt
patch_ptr ->
Ptr CInt -> Ptr CInt -> Ptr CInt -> IO ()
c_zmq_version Ptr CInt
major_ptr Ptr CInt
minor_ptr Ptr CInt
patch_ptr IO () -> IO (Int, Int, Int) -> IO (Int, Int, Int)
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>>
CInt -> CInt -> CInt -> (Int, Int, Int)
forall a a a a b c.
(Integral a, Integral a, Integral a, Num a, Num b, Num c) =>
a -> a -> a -> (a, b, c)
tupleUp (CInt -> CInt -> CInt -> (Int, Int, Int))
-> IO CInt -> IO (CInt -> CInt -> (Int, Int, Int))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
major_ptr IO (CInt -> CInt -> (Int, Int, Int))
-> IO CInt -> IO (CInt -> (Int, Int, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
minor_ptr IO (CInt -> (Int, Int, Int)) -> IO CInt -> IO (Int, Int, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
patch_ptr
where
tupleUp :: a -> a -> a -> (a, b, c)
tupleUp a :: a
a b :: a
b c :: a
c = (a -> a
forall a b. (Integral a, Num b) => a -> b
fromIntegral a
a, a -> b
forall a b. (Integral a, Num b) => a -> b
fromIntegral a
b, a -> c
forall a b. (Integral a, Num b) => a -> b
fromIntegral a
c)
init :: Size -> IO Context
init :: Size -> IO Context
init n :: Size
n = do
Context
c <- IO Context
context
Size -> Context -> IO ()
setIoThreads Size
n Context
c
Context -> IO Context
forall (m :: * -> *) a. Monad m => a -> m a
return Context
c
{-# DEPRECATED init "Use context" #-}
context :: IO Context
context :: IO Context
context = ZMQCtx -> Context
Context (ZMQCtx -> Context) -> IO ZMQCtx -> IO Context
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> String -> IO ZMQCtx -> IO ZMQCtx
forall a. String -> IO (Ptr a) -> IO (Ptr a)
throwIfNull "init" IO ZMQCtx
c_zmq_ctx_new
term :: Context -> IO ()
term :: Context -> IO ()
term c :: Context
c = String -> IO CInt -> IO ()
forall a. (Eq a, Num a) => String -> IO a -> IO ()
throwIfMinus1Retry_ "term" (IO CInt -> IO ()) -> (Context -> IO CInt) -> Context -> IO ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ZMQCtx -> IO CInt
c_zmq_ctx_term (ZMQCtx -> IO CInt) -> (Context -> ZMQCtx) -> Context -> IO CInt
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Context -> ZMQCtx
_ctx (Context -> IO ()) -> Context -> IO ()
forall a b. (a -> b) -> a -> b
$ Context
c
shutdown :: Context -> IO ()
shutdown :: Context -> IO ()
shutdown = String -> IO CInt -> IO ()
forall a. (Eq a, Num a) => String -> IO a -> IO ()
throwIfMinus1_ "shutdown" (IO CInt -> IO ()) -> (Context -> IO CInt) -> Context -> IO ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ZMQCtx -> IO CInt
c_zmq_ctx_shutdown (ZMQCtx -> IO CInt) -> (Context -> ZMQCtx) -> Context -> IO CInt
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Context -> ZMQCtx
_ctx
withContext :: (Context -> IO a) -> IO a
withContext :: (Context -> IO a) -> IO a
withContext act :: Context -> IO a
act =
IO ZMQCtx -> (ZMQCtx -> IO ()) -> (ZMQCtx -> IO a) -> IO a
forall a b c. IO a -> (a -> IO b) -> (a -> IO c) -> IO c
bracket (String -> IO ZMQCtx -> IO ZMQCtx
forall a. String -> IO (Ptr a) -> IO (Ptr a)
throwIfNull "withContext (new)" (IO ZMQCtx -> IO ZMQCtx) -> IO ZMQCtx -> IO ZMQCtx
forall a b. (a -> b) -> a -> b
$ IO ZMQCtx
c_zmq_ctx_new)
(String -> IO CInt -> IO ()
forall a. (Eq a, Num a) => String -> IO a -> IO ()
throwIfMinus1Retry_ "withContext (term)" (IO CInt -> IO ()) -> (ZMQCtx -> IO CInt) -> ZMQCtx -> IO ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ZMQCtx -> IO CInt
c_zmq_ctx_term)
(Context -> IO a
act (Context -> IO a) -> (ZMQCtx -> Context) -> ZMQCtx -> IO a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ZMQCtx -> Context
Context)
withSocket :: SocketType a => Context -> a -> (Socket a -> IO b) -> IO b
withSocket :: Context -> a -> (Socket a -> IO b) -> IO b
withSocket c :: Context
c t :: a
t = IO (Socket a) -> (Socket a -> IO ()) -> (Socket a -> IO b) -> IO b
forall a b c. IO a -> (a -> IO b) -> (a -> IO c) -> IO c
bracket (Context -> a -> IO (Socket a)
forall a. SocketType a => Context -> a -> IO (Socket a)
socket Context
c a
t) Socket a -> IO ()
forall a. Socket a -> IO ()
close
socket :: SocketType a => Context -> a -> IO (Socket a)
socket :: Context -> a -> IO (Socket a)
socket c :: Context
c t :: a
t = SocketRepr -> Socket a
forall a. SocketRepr -> Socket a
Socket (SocketRepr -> Socket a) -> IO SocketRepr -> IO (Socket a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> a -> Context -> IO SocketRepr
forall t. SocketType t => t -> Context -> IO SocketRepr
mkSocketRepr a
t Context
c
close :: Socket a -> IO ()
close :: Socket a -> IO ()
close = SocketRepr -> IO ()
closeSock (SocketRepr -> IO ())
-> (Socket a -> SocketRepr) -> Socket a -> IO ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Socket a -> SocketRepr
forall a. Socket a -> SocketRepr
_socketRepr
subscribe :: Subscriber a => Socket a -> SB.ByteString -> IO ()
subscribe :: Socket a -> ByteString -> IO ()
subscribe s :: Socket a
s = Socket a -> ZMQOption -> ByteString -> IO ()
forall a. Socket a -> ZMQOption -> ByteString -> IO ()
setByteStringOpt Socket a
s ZMQOption
B.subscribe
unsubscribe :: Subscriber a => Socket a -> SB.ByteString -> IO ()
unsubscribe :: Socket a -> ByteString -> IO ()
unsubscribe s :: Socket a
s = Socket a -> ZMQOption -> ByteString -> IO ()
forall a. Socket a -> ZMQOption -> ByteString -> IO ()
setByteStringOpt Socket a
s ZMQOption
B.unsubscribe
events :: Socket a -> IO [Event]
events :: Socket a -> IO [Event]
events s :: Socket a
s = Word32 -> [Event]
toEvents (Word32 -> [Event]) -> IO Word32 -> IO [Event]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Socket a -> ZMQOption -> Word32 -> IO Word32
forall b a.
(Storable b, Integral b) =>
Socket a -> ZMQOption -> b -> IO b
getIntOpt Socket a
s ZMQOption
B.events 0
fileDescriptor :: Socket a -> IO Fd
fileDescriptor :: Socket a -> IO Fd
fileDescriptor s :: Socket a
s = CInt -> Fd
Fd (CInt -> Fd) -> (Int -> CInt) -> Int -> Fd
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int -> CInt
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Int -> Fd) -> IO Int -> IO Fd
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ZMQOption -> Socket a -> IO Int
forall a. ZMQOption -> Socket a -> IO Int
getInt32Option ZMQOption
B.filedesc Socket a
s
moreToReceive :: Socket a -> IO Bool
moreToReceive :: Socket a -> IO Bool
moreToReceive s :: Socket a
s = (Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== 1) (Int -> Bool) -> IO Int -> IO Bool
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ZMQOption -> Socket a -> IO Int
forall a. ZMQOption -> Socket a -> IO Int
getInt32Option ZMQOption
B.receiveMore Socket a
s
ioThreads :: Context -> IO Word
ioThreads :: Context -> IO Size
ioThreads = String -> ZMQCtxOption -> Context -> IO Size
forall i. Integral i => String -> ZMQCtxOption -> Context -> IO i
ctxIntOption "ioThreads" ZMQCtxOption
_ioThreads
maxSockets :: Context -> IO Word
maxSockets :: Context -> IO Size
maxSockets = String -> ZMQCtxOption -> Context -> IO Size
forall i. Integral i => String -> ZMQCtxOption -> Context -> IO i
ctxIntOption "maxSockets" ZMQCtxOption
_maxSockets
conflate :: Conflatable a => Socket a -> IO Bool
conflate :: Socket a -> IO Bool
conflate s :: Socket a
s = (Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== 1) (Int -> Bool) -> IO Int -> IO Bool
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ZMQOption -> Socket a -> IO Int
forall a. ZMQOption -> Socket a -> IO Int
getInt32Option ZMQOption
B.conflate Socket a
s
immediate :: Socket a -> IO Bool
immediate :: Socket a -> IO Bool
immediate s :: Socket a
s = (Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== 1) (Int -> Bool) -> IO Int -> IO Bool
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ZMQOption -> Socket a -> IO Int
forall a. ZMQOption -> Socket a -> IO Int
getInt32Option ZMQOption
B.immediate Socket a
s
identity :: Socket a -> IO SB.ByteString
identity :: Socket a -> IO ByteString
identity s :: Socket a
s = Socket a -> ZMQOption -> IO ByteString
forall a. Socket a -> ZMQOption -> IO ByteString
getBytesOpt Socket a
s ZMQOption
B.identity
affinity :: Socket a -> IO Word64
affinity :: Socket a -> IO Word64
affinity s :: Socket a
s = Socket a -> ZMQOption -> Word64 -> IO Word64
forall b a.
(Storable b, Integral b) =>
Socket a -> ZMQOption -> b -> IO b
getIntOpt Socket a
s ZMQOption
B.affinity 0
maxMessageSize :: Socket a -> IO Int64
maxMessageSize :: Socket a -> IO Int64
maxMessageSize s :: Socket a
s = Socket a -> ZMQOption -> Int64 -> IO Int64
forall b a.
(Storable b, Integral b) =>
Socket a -> ZMQOption -> b -> IO b
getIntOpt Socket a
s ZMQOption
B.maxMessageSize 0
ipv4Only :: Socket a -> IO Bool
ipv4Only :: Socket a -> IO Bool
ipv4Only s :: Socket a
s = (Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== 1) (Int -> Bool) -> IO Int -> IO Bool
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ZMQOption -> Socket a -> IO Int
forall a. ZMQOption -> Socket a -> IO Int
getInt32Option ZMQOption
B.ipv4Only Socket a
s
{-# DEPRECATED ipv4Only "Use ipv6" #-}
ipv6 :: Socket a -> IO Bool
ipv6 :: Socket a -> IO Bool
ipv6 s :: Socket a
s = (Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== 1) (Int -> Bool) -> IO Int -> IO Bool
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ZMQOption -> Socket a -> IO Int
forall a. ZMQOption -> Socket a -> IO Int
getInt32Option ZMQOption
B.ipv6 Socket a
s
backlog :: Socket a -> IO Int
backlog :: Socket a -> IO Int
backlog = ZMQOption -> Socket a -> IO Int
forall a. ZMQOption -> Socket a -> IO Int
getInt32Option ZMQOption
B.backlog
delayAttachOnConnect :: Socket a -> IO Bool
delayAttachOnConnect :: Socket a -> IO Bool
delayAttachOnConnect s :: Socket a
s = (Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== 1) (Int -> Bool) -> IO Int -> IO Bool
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ZMQOption -> Socket a -> IO Int
forall a. ZMQOption -> Socket a -> IO Int
getInt32Option ZMQOption
B.delayAttachOnConnect Socket a
s
{-# DEPRECATED delayAttachOnConnect "Use immediate" #-}
linger :: Socket a -> IO Int
linger :: Socket a -> IO Int
linger = ZMQOption -> Socket a -> IO Int
forall a. ZMQOption -> Socket a -> IO Int
getInt32Option ZMQOption
B.linger
lastEndpoint :: Socket a -> IO String
lastEndpoint :: Socket a -> IO String
lastEndpoint s :: Socket a
s = Socket a -> ZMQOption -> IO String
forall a. Socket a -> ZMQOption -> IO String
getStrOpt Socket a
s ZMQOption
B.lastEndpoint
rate :: Socket a -> IO Int
rate :: Socket a -> IO Int
rate = ZMQOption -> Socket a -> IO Int
forall a. ZMQOption -> Socket a -> IO Int
getInt32Option ZMQOption
B.rate
receiveBuffer :: Socket a -> IO Int
receiveBuffer :: Socket a -> IO Int
receiveBuffer = ZMQOption -> Socket a -> IO Int
forall a. ZMQOption -> Socket a -> IO Int
getInt32Option ZMQOption
B.receiveBuf
reconnectInterval :: Socket a -> IO Int
reconnectInterval :: Socket a -> IO Int
reconnectInterval = ZMQOption -> Socket a -> IO Int
forall a. ZMQOption -> Socket a -> IO Int
getInt32Option ZMQOption
B.reconnectIVL
reconnectIntervalMax :: Socket a -> IO Int
reconnectIntervalMax :: Socket a -> IO Int
reconnectIntervalMax = ZMQOption -> Socket a -> IO Int
forall a. ZMQOption -> Socket a -> IO Int
getInt32Option ZMQOption
B.reconnectIVLMax
recoveryInterval :: Socket a -> IO Int
recoveryInterval :: Socket a -> IO Int
recoveryInterval = ZMQOption -> Socket a -> IO Int
forall a. ZMQOption -> Socket a -> IO Int
getInt32Option ZMQOption
B.recoveryIVL
sendBuffer :: Socket a -> IO Int
sendBuffer :: Socket a -> IO Int
sendBuffer = ZMQOption -> Socket a -> IO Int
forall a. ZMQOption -> Socket a -> IO Int
getInt32Option ZMQOption
B.sendBuf
mcastHops :: Socket a -> IO Int
mcastHops :: Socket a -> IO Int
mcastHops = ZMQOption -> Socket a -> IO Int
forall a. ZMQOption -> Socket a -> IO Int
getInt32Option ZMQOption
B.mcastHops
receiveHighWM :: Socket a -> IO Int
receiveHighWM :: Socket a -> IO Int
receiveHighWM = ZMQOption -> Socket a -> IO Int
forall a. ZMQOption -> Socket a -> IO Int
getInt32Option ZMQOption
B.receiveHighWM
receiveTimeout :: Socket a -> IO Int
receiveTimeout :: Socket a -> IO Int
receiveTimeout = ZMQOption -> Socket a -> IO Int
forall a. ZMQOption -> Socket a -> IO Int
getInt32Option ZMQOption
B.receiveTimeout
sendTimeout :: Socket a -> IO Int
sendTimeout :: Socket a -> IO Int
sendTimeout = ZMQOption -> Socket a -> IO Int
forall a. ZMQOption -> Socket a -> IO Int
getInt32Option ZMQOption
B.sendTimeout
sendHighWM :: Socket a -> IO Int
sendHighWM :: Socket a -> IO Int
sendHighWM = ZMQOption -> Socket a -> IO Int
forall a. ZMQOption -> Socket a -> IO Int
getInt32Option ZMQOption
B.sendHighWM
tcpKeepAlive :: Socket a -> IO Switch
tcpKeepAlive :: Socket a -> IO Switch
tcpKeepAlive = (Int -> Switch) -> IO Int -> IO Switch
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (String -> Int -> Switch
forall a. (Show a, Integral a) => String -> a -> Switch
toSwitch "Invalid ZMQ_TCP_KEEPALIVE")
(IO Int -> IO Switch)
-> (Socket a -> IO Int) -> Socket a -> IO Switch
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ZMQOption -> Socket a -> IO Int
forall a. ZMQOption -> Socket a -> IO Int
getInt32Option ZMQOption
B.tcpKeepAlive
tcpKeepAliveCount :: Socket a -> IO Int
tcpKeepAliveCount :: Socket a -> IO Int
tcpKeepAliveCount = ZMQOption -> Socket a -> IO Int
forall a. ZMQOption -> Socket a -> IO Int
getInt32Option ZMQOption
B.tcpKeepAliveCount
tcpKeepAliveIdle :: Socket a -> IO Int
tcpKeepAliveIdle :: Socket a -> IO Int
tcpKeepAliveIdle = ZMQOption -> Socket a -> IO Int
forall a. ZMQOption -> Socket a -> IO Int
getInt32Option ZMQOption
B.tcpKeepAliveIdle
tcpKeepAliveInterval :: Socket a -> IO Int
tcpKeepAliveInterval :: Socket a -> IO Int
tcpKeepAliveInterval = ZMQOption -> Socket a -> IO Int
forall a. ZMQOption -> Socket a -> IO Int
getInt32Option ZMQOption
B.tcpKeepAliveInterval
mechanism :: Socket a -> IO SecurityMechanism
mechanism :: Socket a -> IO SecurityMechanism
mechanism = (Int -> SecurityMechanism) -> IO Int -> IO SecurityMechanism
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (String -> Int -> SecurityMechanism
fromMechanism "Invalid ZMQ_MECHANISM")
(IO Int -> IO SecurityMechanism)
-> (Socket a -> IO Int) -> Socket a -> IO SecurityMechanism
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ZMQOption -> Socket a -> IO Int
forall a. ZMQOption -> Socket a -> IO Int
getInt32Option ZMQOption
B.mechanism
plainServer :: Socket a -> IO Bool
plainServer :: Socket a -> IO Bool
plainServer = (Int -> Bool) -> IO Int -> IO Bool
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== 1) (IO Int -> IO Bool) -> (Socket a -> IO Int) -> Socket a -> IO Bool
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ZMQOption -> Socket a -> IO Int
forall a. ZMQOption -> Socket a -> IO Int
getInt32Option ZMQOption
B.plainServer
plainUserName :: Socket a -> IO SB.ByteString
plainUserName :: Socket a -> IO ByteString
plainUserName s :: Socket a
s = Socket a -> ZMQOption -> IO ByteString
forall a. Socket a -> ZMQOption -> IO ByteString
getByteStringOpt Socket a
s ZMQOption
B.plainUserName
plainPassword :: Socket a -> IO SB.ByteString
plainPassword :: Socket a -> IO ByteString
plainPassword s :: Socket a
s = Socket a -> ZMQOption -> IO ByteString
forall a. Socket a -> ZMQOption -> IO ByteString
getByteStringOpt Socket a
s ZMQOption
B.plainPassword
zapDomain :: Socket a -> IO SB.ByteString
zapDomain :: Socket a -> IO ByteString
zapDomain s :: Socket a
s = Socket a -> ZMQOption -> IO ByteString
forall a. Socket a -> ZMQOption -> IO ByteString
getByteStringOpt Socket a
s ZMQOption
B.zapDomain
curvePublicKey :: KeyFormat f -> Socket a -> IO SB.ByteString
curvePublicKey :: KeyFormat f -> Socket a -> IO ByteString
curvePublicKey f :: KeyFormat f
f s :: Socket a
s = KeyFormat f -> Socket a -> ZMQOption -> IO ByteString
forall f a. KeyFormat f -> Socket a -> ZMQOption -> IO ByteString
getKey KeyFormat f
f Socket a
s ZMQOption
B.curvePublicKey
curveServerKey :: KeyFormat f -> Socket a -> IO SB.ByteString
curveServerKey :: KeyFormat f -> Socket a -> IO ByteString
curveServerKey f :: KeyFormat f
f s :: Socket a
s = KeyFormat f -> Socket a -> ZMQOption -> IO ByteString
forall f a. KeyFormat f -> Socket a -> ZMQOption -> IO ByteString
getKey KeyFormat f
f Socket a
s ZMQOption
B.curveServerKey
curveSecretKey :: KeyFormat f -> Socket a -> IO SB.ByteString
curveSecretKey :: KeyFormat f -> Socket a -> IO ByteString
curveSecretKey f :: KeyFormat f
f s :: Socket a
s = KeyFormat f -> Socket a -> ZMQOption -> IO ByteString
forall f a. KeyFormat f -> Socket a -> ZMQOption -> IO ByteString
getKey KeyFormat f
f Socket a
s ZMQOption
B.curveSecretKey
setIoThreads :: Word -> Context -> IO ()
setIoThreads :: Size -> Context -> IO ()
setIoThreads n :: Size
n = String -> ZMQCtxOption -> Size -> Context -> IO ()
forall i.
Integral i =>
String -> ZMQCtxOption -> i -> Context -> IO ()
setCtxIntOption "ioThreads" ZMQCtxOption
_ioThreads Size
n
setMaxSockets :: Word -> Context -> IO ()
setMaxSockets :: Size -> Context -> IO ()
setMaxSockets n :: Size
n = String -> ZMQCtxOption -> Size -> Context -> IO ()
forall i.
Integral i =>
String -> ZMQCtxOption -> i -> Context -> IO ()
setCtxIntOption "maxSockets" ZMQCtxOption
_maxSockets Size
n
setConflate :: Conflatable a => Bool -> Socket a -> IO ()
setConflate :: Bool -> Socket a -> IO ()
setConflate x :: Bool
x s :: Socket a
s = Socket a -> ZMQOption -> CInt -> IO ()
forall b a.
(Storable b, Integral b) =>
Socket a -> ZMQOption -> b -> IO ()
setIntOpt Socket a
s ZMQOption
B.conflate (Bool -> CInt
bool2cint Bool
x)
setImmediate :: Bool -> Socket a -> IO ()
setImmediate :: Bool -> Socket a -> IO ()
setImmediate x :: Bool
x s :: Socket a
s = Socket a -> ZMQOption -> CInt -> IO ()
forall b a.
(Storable b, Integral b) =>
Socket a -> ZMQOption -> b -> IO ()
setIntOpt Socket a
s ZMQOption
B.immediate (Bool -> CInt
bool2cint Bool
x)
setIdentity :: Restricted (N1, N254) SB.ByteString -> Socket a -> IO ()
setIdentity :: Restricted (N1, N254) ByteString -> Socket a -> IO ()
setIdentity x :: Restricted (N1, N254) ByteString
x s :: Socket a
s = Socket a -> ZMQOption -> ByteString -> IO ()
forall a. Socket a -> ZMQOption -> ByteString -> IO ()
setByteStringOpt Socket a
s ZMQOption
B.identity (Restricted (N1, N254) ByteString -> ByteString
forall r v. Restricted r v -> v
rvalue Restricted (N1, N254) ByteString
x)
setAffinity :: Word64 -> Socket a -> IO ()
setAffinity :: Word64 -> Socket a -> IO ()
setAffinity x :: Word64
x s :: Socket a
s = Socket a -> ZMQOption -> Word64 -> IO ()
forall b a.
(Storable b, Integral b) =>
Socket a -> ZMQOption -> b -> IO ()
setIntOpt Socket a
s ZMQOption
B.affinity Word64
x
setDelayAttachOnConnect :: Bool -> Socket a -> IO ()
setDelayAttachOnConnect :: Bool -> Socket a -> IO ()
setDelayAttachOnConnect x :: Bool
x s :: Socket a
s = Socket a -> ZMQOption -> CInt -> IO ()
forall b a.
(Storable b, Integral b) =>
Socket a -> ZMQOption -> b -> IO ()
setIntOpt Socket a
s ZMQOption
B.delayAttachOnConnect (Bool -> CInt
bool2cint Bool
x)
{-# DEPRECATED setDelayAttachOnConnect "Use setImmediate" #-}
setMaxMessageSize :: Integral i => Restricted (Nneg1, Int64) i -> Socket a -> IO ()
setMaxMessageSize :: Restricted (Nneg1, Int64) i -> Socket a -> IO ()
setMaxMessageSize x :: Restricted (Nneg1, Int64) i
x s :: Socket a
s = Socket a -> ZMQOption -> Int64 -> IO ()
forall b a.
(Storable b, Integral b) =>
Socket a -> ZMQOption -> b -> IO ()
setIntOpt Socket a
s ZMQOption
B.maxMessageSize ((i -> Int64
forall a b. (Integral a, Num b) => a -> b
fromIntegral (i -> Int64)
-> (Restricted (Nneg1, Int64) i -> i)
-> Restricted (Nneg1, Int64) i
-> Int64
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Restricted (Nneg1, Int64) i -> i
forall r v. Restricted r v -> v
rvalue (Restricted (Nneg1, Int64) i -> Int64)
-> Restricted (Nneg1, Int64) i -> Int64
forall a b. (a -> b) -> a -> b
$ Restricted (Nneg1, Int64) i
x) :: Int64)
setIpv4Only :: Bool -> Socket a -> IO ()
setIpv4Only :: Bool -> Socket a -> IO ()
setIpv4Only x :: Bool
x s :: Socket a
s = Socket a -> ZMQOption -> CInt -> IO ()
forall b a.
(Storable b, Integral b) =>
Socket a -> ZMQOption -> b -> IO ()
setIntOpt Socket a
s ZMQOption
B.ipv4Only (Bool -> CInt
bool2cint Bool
x)
{-# DEPRECATED setIpv4Only "Use setIpv6" #-}
setIpv6 :: Bool -> Socket a -> IO ()
setIpv6 :: Bool -> Socket a -> IO ()
setIpv6 x :: Bool
x s :: Socket a
s = Socket a -> ZMQOption -> CInt -> IO ()
forall b a.
(Storable b, Integral b) =>
Socket a -> ZMQOption -> b -> IO ()
setIntOpt Socket a
s ZMQOption
B.ipv6 (Bool -> CInt
bool2cint Bool
x)
setPlainServer :: Bool -> Socket a -> IO ()
setPlainServer :: Bool -> Socket a -> IO ()
setPlainServer x :: Bool
x s :: Socket a
s = Socket a -> ZMQOption -> CInt -> IO ()
forall b a.
(Storable b, Integral b) =>
Socket a -> ZMQOption -> b -> IO ()
setIntOpt Socket a
s ZMQOption
B.plainServer (Bool -> CInt
bool2cint Bool
x)
setCurveServer :: Bool -> Socket a -> IO ()
setCurveServer :: Bool -> Socket a -> IO ()
setCurveServer x :: Bool
x s :: Socket a
s = Socket a -> ZMQOption -> CInt -> IO ()
forall b a.
(Storable b, Integral b) =>
Socket a -> ZMQOption -> b -> IO ()
setIntOpt Socket a
s ZMQOption
B.curveServer (Bool -> CInt
bool2cint Bool
x)
setPlainUserName :: Restricted (N1, N254) SB.ByteString -> Socket a -> IO ()
setPlainUserName :: Restricted (N1, N254) ByteString -> Socket a -> IO ()
setPlainUserName x :: Restricted (N1, N254) ByteString
x s :: Socket a
s = Socket a -> ZMQOption -> ByteString -> IO ()
forall a. Socket a -> ZMQOption -> ByteString -> IO ()
setByteStringOpt Socket a
s ZMQOption
B.plainUserName (Restricted (N1, N254) ByteString -> ByteString
forall r v. Restricted r v -> v
rvalue Restricted (N1, N254) ByteString
x)
setPlainPassword :: Restricted (N1, N254) SB.ByteString -> Socket a -> IO ()
setPlainPassword :: Restricted (N1, N254) ByteString -> Socket a -> IO ()
setPlainPassword x :: Restricted (N1, N254) ByteString
x s :: Socket a
s = Socket a -> ZMQOption -> ByteString -> IO ()
forall a. Socket a -> ZMQOption -> ByteString -> IO ()
setByteStringOpt Socket a
s ZMQOption
B.plainPassword (Restricted (N1, N254) ByteString -> ByteString
forall r v. Restricted r v -> v
rvalue Restricted (N1, N254) ByteString
x)
setLinger :: Integral i => Restricted (Nneg1, Int32) i -> Socket a -> IO ()
setLinger :: Restricted (Nneg1, Int32) i -> Socket a -> IO ()
setLinger = ZMQOption -> Restricted (Nneg1, Int32) i -> Socket a -> IO ()
forall i r b.
Integral i =>
ZMQOption -> Restricted r i -> Socket b -> IO ()
setInt32OptFromRestricted ZMQOption
B.linger
setReceiveTimeout :: Integral i => Restricted (Nneg1, Int32) i -> Socket a -> IO ()
setReceiveTimeout :: Restricted (Nneg1, Int32) i -> Socket a -> IO ()
setReceiveTimeout = ZMQOption -> Restricted (Nneg1, Int32) i -> Socket a -> IO ()
forall i r b.
Integral i =>
ZMQOption -> Restricted r i -> Socket b -> IO ()
setInt32OptFromRestricted ZMQOption
B.receiveTimeout
setRouterMandatory :: Bool -> Socket Router -> IO ()
setRouterMandatory :: Bool -> Socket Router -> IO ()
setRouterMandatory x :: Bool
x s :: Socket Router
s = Socket Router -> ZMQOption -> CInt -> IO ()
forall b a.
(Storable b, Integral b) =>
Socket a -> ZMQOption -> b -> IO ()
setIntOpt Socket Router
s ZMQOption
B.routerMandatory (Bool -> CInt
bool2cint Bool
x)
setSendTimeout :: Integral i => Restricted (Nneg1, Int32) i -> Socket a -> IO ()
setSendTimeout :: Restricted (Nneg1, Int32) i -> Socket a -> IO ()
setSendTimeout = ZMQOption -> Restricted (Nneg1, Int32) i -> Socket a -> IO ()
forall i r b.
Integral i =>
ZMQOption -> Restricted r i -> Socket b -> IO ()
setInt32OptFromRestricted ZMQOption
B.sendTimeout
setRate :: Integral i => Restricted (N1, Int32) i -> Socket a -> IO ()
setRate :: Restricted (N1, Int32) i -> Socket a -> IO ()
setRate = ZMQOption -> Restricted (N1, Int32) i -> Socket a -> IO ()
forall i r b.
Integral i =>
ZMQOption -> Restricted r i -> Socket b -> IO ()
setInt32OptFromRestricted ZMQOption
B.rate
setMcastHops :: Integral i => Restricted (N1, Int32) i -> Socket a -> IO ()
setMcastHops :: Restricted (N1, Int32) i -> Socket a -> IO ()
setMcastHops = ZMQOption -> Restricted (N1, Int32) i -> Socket a -> IO ()
forall i r b.
Integral i =>
ZMQOption -> Restricted r i -> Socket b -> IO ()
setInt32OptFromRestricted ZMQOption
B.mcastHops
setBacklog :: Integral i => Restricted (N0, Int32) i -> Socket a -> IO ()
setBacklog :: Restricted (N0, Int32) i -> Socket a -> IO ()
setBacklog = ZMQOption -> Restricted (N0, Int32) i -> Socket a -> IO ()
forall i r b.
Integral i =>
ZMQOption -> Restricted r i -> Socket b -> IO ()
setInt32OptFromRestricted ZMQOption
B.backlog
setCurvePublicKey :: KeyFormat f -> Restricted f SB.ByteString -> Socket a -> IO ()
setCurvePublicKey :: KeyFormat f -> Restricted f ByteString -> Socket a -> IO ()
setCurvePublicKey _ k :: Restricted f ByteString
k s :: Socket a
s = Socket a -> ZMQOption -> ByteString -> IO ()
forall a. Socket a -> ZMQOption -> ByteString -> IO ()
setByteStringOpt Socket a
s ZMQOption
B.curvePublicKey (Restricted f ByteString -> ByteString
forall r v. Restricted r v -> v
rvalue Restricted f ByteString
k)
setCurveSecretKey :: KeyFormat f -> Restricted f SB.ByteString -> Socket a -> IO ()
setCurveSecretKey :: KeyFormat f -> Restricted f ByteString -> Socket a -> IO ()
setCurveSecretKey _ k :: Restricted f ByteString
k s :: Socket a
s = Socket a -> ZMQOption -> ByteString -> IO ()
forall a. Socket a -> ZMQOption -> ByteString -> IO ()
setByteStringOpt Socket a
s ZMQOption
B.curveSecretKey (Restricted f ByteString -> ByteString
forall r v. Restricted r v -> v
rvalue Restricted f ByteString
k)
setCurveServerKey :: KeyFormat f -> Restricted f SB.ByteString -> Socket a -> IO ()
setCurveServerKey :: KeyFormat f -> Restricted f ByteString -> Socket a -> IO ()
setCurveServerKey _ k :: Restricted f ByteString
k s :: Socket a
s = Socket a -> ZMQOption -> ByteString -> IO ()
forall a. Socket a -> ZMQOption -> ByteString -> IO ()
setByteStringOpt Socket a
s ZMQOption
B.curveServerKey (Restricted f ByteString -> ByteString
forall r v. Restricted r v -> v
rvalue Restricted f ByteString
k)
setProbeRouter :: SendProbe a => Bool -> Socket a -> IO ()
setProbeRouter :: Bool -> Socket a -> IO ()
setProbeRouter x :: Bool
x s :: Socket a
s = Socket a -> ZMQOption -> CInt -> IO ()
forall b a.
(Storable b, Integral b) =>
Socket a -> ZMQOption -> b -> IO ()
setIntOpt Socket a
s ZMQOption
B.probeRouter (Bool -> CInt
bool2cint Bool
x)
setReceiveBuffer :: Integral i => Restricted (N0, Int32) i -> Socket a -> IO ()
setReceiveBuffer :: Restricted (N0, Int32) i -> Socket a -> IO ()
setReceiveBuffer = ZMQOption -> Restricted (N0, Int32) i -> Socket a -> IO ()
forall i r b.
Integral i =>
ZMQOption -> Restricted r i -> Socket b -> IO ()
setInt32OptFromRestricted ZMQOption
B.receiveBuf
setReconnectInterval :: Integral i => Restricted (N0, Int32) i -> Socket a -> IO ()
setReconnectInterval :: Restricted (N0, Int32) i -> Socket a -> IO ()
setReconnectInterval = ZMQOption -> Restricted (N0, Int32) i -> Socket a -> IO ()
forall i r b.
Integral i =>
ZMQOption -> Restricted r i -> Socket b -> IO ()
setInt32OptFromRestricted ZMQOption
B.reconnectIVL
setReconnectIntervalMax :: Integral i => Restricted (N0, Int32) i -> Socket a -> IO ()
setReconnectIntervalMax :: Restricted (N0, Int32) i -> Socket a -> IO ()
setReconnectIntervalMax = ZMQOption -> Restricted (N0, Int32) i -> Socket a -> IO ()
forall i r b.
Integral i =>
ZMQOption -> Restricted r i -> Socket b -> IO ()
setInt32OptFromRestricted ZMQOption
B.reconnectIVLMax
setReqCorrelate :: Bool -> Socket Req -> IO ()
setReqCorrelate :: Bool -> Socket Req -> IO ()
setReqCorrelate x :: Bool
x s :: Socket Req
s = Socket Req -> ZMQOption -> CInt -> IO ()
forall b a.
(Storable b, Integral b) =>
Socket a -> ZMQOption -> b -> IO ()
setIntOpt Socket Req
s ZMQOption
B.reqCorrelate (Bool -> CInt
bool2cint Bool
x)
setReqRelaxed :: Bool -> Socket Req -> IO ()
setReqRelaxed :: Bool -> Socket Req -> IO ()
setReqRelaxed x :: Bool
x s :: Socket Req
s = Socket Req -> ZMQOption -> CInt -> IO ()
forall b a.
(Storable b, Integral b) =>
Socket a -> ZMQOption -> b -> IO ()
setIntOpt Socket Req
s ZMQOption
B.reqRelaxed (Bool -> CInt
bool2cint Bool
x)
setSendBuffer :: Integral i => Restricted (N0, Int32) i -> Socket a -> IO ()
setSendBuffer :: Restricted (N0, Int32) i -> Socket a -> IO ()
setSendBuffer = ZMQOption -> Restricted (N0, Int32) i -> Socket a -> IO ()
forall i r b.
Integral i =>
ZMQOption -> Restricted r i -> Socket b -> IO ()
setInt32OptFromRestricted ZMQOption
B.sendBuf
setRecoveryInterval :: Integral i => Restricted (N0, Int32) i -> Socket a -> IO ()
setRecoveryInterval :: Restricted (N0, Int32) i -> Socket a -> IO ()
setRecoveryInterval = ZMQOption -> Restricted (N0, Int32) i -> Socket a -> IO ()
forall i r b.
Integral i =>
ZMQOption -> Restricted r i -> Socket b -> IO ()
setInt32OptFromRestricted ZMQOption
B.recoveryIVL
setReceiveHighWM :: Integral i => Restricted (N0, Int32) i -> Socket a -> IO ()
setReceiveHighWM :: Restricted (N0, Int32) i -> Socket a -> IO ()
setReceiveHighWM = ZMQOption -> Restricted (N0, Int32) i -> Socket a -> IO ()
forall i r b.
Integral i =>
ZMQOption -> Restricted r i -> Socket b -> IO ()
setInt32OptFromRestricted ZMQOption
B.receiveHighWM
setSendHighWM :: Integral i => Restricted (N0, Int32) i -> Socket a -> IO ()
setSendHighWM :: Restricted (N0, Int32) i -> Socket a -> IO ()
setSendHighWM = ZMQOption -> Restricted (N0, Int32) i -> Socket a -> IO ()
forall i r b.
Integral i =>
ZMQOption -> Restricted r i -> Socket b -> IO ()
setInt32OptFromRestricted ZMQOption
B.sendHighWM
setTcpAcceptFilter :: Maybe SB.ByteString -> Socket a -> IO ()
setTcpAcceptFilter :: Maybe ByteString -> Socket a -> IO ()
setTcpAcceptFilter Nothing sock :: Socket a
sock = String -> Socket a -> (ZMQCtx -> IO ()) -> IO ()
forall a b. String -> Socket a -> (ZMQCtx -> IO b) -> IO b
onSocket "setTcpAcceptFilter" Socket a
sock ((ZMQCtx -> IO ()) -> IO ()) -> (ZMQCtx -> IO ()) -> IO ()
forall a b. (a -> b) -> a -> b
$ \s :: ZMQCtx
s ->
String -> IO CInt -> IO ()
forall a. (Eq a, Num a) => String -> IO a -> IO ()
throwIfMinus1Retry_ "setStrOpt" (IO CInt -> IO ()) -> IO CInt -> IO ()
forall a b. (a -> b) -> a -> b
$
ZMQCtx -> CInt -> ZMQCtx -> CSize -> IO CInt
c_zmq_setsockopt ZMQCtx
s (ZMQOption -> CInt
optVal ZMQOption
tcpAcceptFilter) ZMQCtx
forall a. Ptr a
nullPtr 0
setTcpAcceptFilter (Just dat :: ByteString
dat) sock :: Socket a
sock = Socket a -> ZMQOption -> ByteString -> IO ()
forall a. Socket a -> ZMQOption -> ByteString -> IO ()
setByteStringOpt Socket a
sock ZMQOption
tcpAcceptFilter ByteString
dat
setTcpKeepAlive :: Switch -> Socket a -> IO ()
setTcpKeepAlive :: Switch -> Socket a -> IO ()
setTcpKeepAlive x :: Switch
x s :: Socket a
s = Socket a -> ZMQOption -> CInt -> IO ()
forall b a.
(Storable b, Integral b) =>
Socket a -> ZMQOption -> b -> IO ()
setIntOpt Socket a
s ZMQOption
B.tcpKeepAlive (Switch -> CInt
forall a. Integral a => Switch -> a
fromSwitch Switch
x :: CInt)
setTcpKeepAliveCount :: Integral i => Restricted (Nneg1, Int32) i -> Socket a -> IO ()
setTcpKeepAliveCount :: Restricted (Nneg1, Int32) i -> Socket a -> IO ()
setTcpKeepAliveCount = ZMQOption -> Restricted (Nneg1, Int32) i -> Socket a -> IO ()
forall i r b.
Integral i =>
ZMQOption -> Restricted r i -> Socket b -> IO ()
setInt32OptFromRestricted ZMQOption
B.tcpKeepAliveCount
setTcpKeepAliveIdle :: Integral i => Restricted (Nneg1, Int32) i -> Socket a -> IO ()
setTcpKeepAliveIdle :: Restricted (Nneg1, Int32) i -> Socket a -> IO ()
setTcpKeepAliveIdle = ZMQOption -> Restricted (Nneg1, Int32) i -> Socket a -> IO ()
forall i r b.
Integral i =>
ZMQOption -> Restricted r i -> Socket b -> IO ()
setInt32OptFromRestricted ZMQOption
B.tcpKeepAliveIdle
setTcpKeepAliveInterval :: Integral i => Restricted (Nneg1, Int32) i -> Socket a -> IO ()
setTcpKeepAliveInterval :: Restricted (Nneg1, Int32) i -> Socket a -> IO ()
setTcpKeepAliveInterval = ZMQOption -> Restricted (Nneg1, Int32) i -> Socket a -> IO ()
forall i r b.
Integral i =>
ZMQOption -> Restricted r i -> Socket b -> IO ()
setInt32OptFromRestricted ZMQOption
B.tcpKeepAliveInterval
setXPubVerbose :: Bool -> Socket XPub -> IO ()
setXPubVerbose :: Bool -> Socket XPub -> IO ()
setXPubVerbose x :: Bool
x s :: Socket XPub
s = Socket XPub -> ZMQOption -> CInt -> IO ()
forall b a.
(Storable b, Integral b) =>
Socket a -> ZMQOption -> b -> IO ()
setIntOpt Socket XPub
s ZMQOption
B.xpubVerbose (Bool -> CInt
bool2cint Bool
x)
setZapDomain :: Restricted (N1, N254) SB.ByteString -> Socket a -> IO ()
setZapDomain :: Restricted (N1, N254) ByteString -> Socket a -> IO ()
setZapDomain x :: Restricted (N1, N254) ByteString
x s :: Socket a
s = Socket a -> ZMQOption -> ByteString -> IO ()
forall a. Socket a -> ZMQOption -> ByteString -> IO ()
setByteStringOpt Socket a
s ZMQOption
B.zapDomain (Restricted (N1, N254) ByteString -> ByteString
forall r v. Restricted r v -> v
rvalue Restricted (N1, N254) ByteString
x)
bind :: Socket a -> String -> IO ()
bind :: Socket a -> String -> IO ()
bind sock :: Socket a
sock str :: String
str = String -> Socket a -> (ZMQCtx -> IO ()) -> IO ()
forall a b. String -> Socket a -> (ZMQCtx -> IO b) -> IO b
onSocket "bind" Socket a
sock ((ZMQCtx -> IO ()) -> IO ()) -> (ZMQCtx -> IO ()) -> IO ()
forall a b. (a -> b) -> a -> b
$
String -> IO CInt -> IO ()
forall a. (Eq a, Num a) => String -> IO a -> IO ()
throwIfMinus1Retry_ "bind" (IO CInt -> IO ()) -> (ZMQCtx -> IO CInt) -> ZMQCtx -> IO ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> (CString -> IO CInt) -> IO CInt
forall a. String -> (CString -> IO a) -> IO a
withCString String
str ((CString -> IO CInt) -> IO CInt)
-> (ZMQCtx -> CString -> IO CInt) -> ZMQCtx -> IO CInt
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ZMQCtx -> CString -> IO CInt
c_zmq_bind
unbind :: Socket a -> String -> IO ()
unbind :: Socket a -> String -> IO ()
unbind sock :: Socket a
sock str :: String
str = String -> Socket a -> (ZMQCtx -> IO ()) -> IO ()
forall a b. String -> Socket a -> (ZMQCtx -> IO b) -> IO b
onSocket "unbind" Socket a
sock ((ZMQCtx -> IO ()) -> IO ()) -> (ZMQCtx -> IO ()) -> IO ()
forall a b. (a -> b) -> a -> b
$
String -> IO CInt -> IO ()
forall a. (Eq a, Num a) => String -> IO a -> IO ()
throwIfMinus1Retry_ "unbind" (IO CInt -> IO ()) -> (ZMQCtx -> IO CInt) -> ZMQCtx -> IO ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> (CString -> IO CInt) -> IO CInt
forall a. String -> (CString -> IO a) -> IO a
withCString String
str ((CString -> IO CInt) -> IO CInt)
-> (ZMQCtx -> CString -> IO CInt) -> ZMQCtx -> IO CInt
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ZMQCtx -> CString -> IO CInt
c_zmq_unbind
connect :: Socket a -> String -> IO ()
connect :: Socket a -> String -> IO ()
connect sock :: Socket a
sock str :: String
str = String -> Socket a -> (ZMQCtx -> IO ()) -> IO ()
forall a b. String -> Socket a -> (ZMQCtx -> IO b) -> IO b
onSocket "connect" Socket a
sock ((ZMQCtx -> IO ()) -> IO ()) -> (ZMQCtx -> IO ()) -> IO ()
forall a b. (a -> b) -> a -> b
$
String -> IO CInt -> IO ()
forall a. (Eq a, Num a) => String -> IO a -> IO ()
throwIfMinus1Retry_ "connect" (IO CInt -> IO ()) -> (ZMQCtx -> IO CInt) -> ZMQCtx -> IO ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> (CString -> IO CInt) -> IO CInt
forall a. String -> (CString -> IO a) -> IO a
withCString String
str ((CString -> IO CInt) -> IO CInt)
-> (ZMQCtx -> CString -> IO CInt) -> ZMQCtx -> IO CInt
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ZMQCtx -> CString -> IO CInt
c_zmq_connect
disconnect :: Socket a -> String -> IO ()
disconnect :: Socket a -> String -> IO ()
disconnect sock :: Socket a
sock str :: String
str = String -> Socket a -> (ZMQCtx -> IO ()) -> IO ()
forall a b. String -> Socket a -> (ZMQCtx -> IO b) -> IO b
onSocket "disconnect" Socket a
sock ((ZMQCtx -> IO ()) -> IO ()) -> (ZMQCtx -> IO ()) -> IO ()
forall a b. (a -> b) -> a -> b
$
String -> IO CInt -> IO ()
forall a. (Eq a, Num a) => String -> IO a -> IO ()
throwIfMinus1Retry_ "disconnect" (IO CInt -> IO ()) -> (ZMQCtx -> IO CInt) -> ZMQCtx -> IO ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> (CString -> IO CInt) -> IO CInt
forall a. String -> (CString -> IO a) -> IO a
withCString String
str ((CString -> IO CInt) -> IO CInt)
-> (ZMQCtx -> CString -> IO CInt) -> ZMQCtx -> IO CInt
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ZMQCtx -> CString -> IO CInt
c_zmq_disconnect
send :: Sender a => Socket a -> [Flag] -> SB.ByteString -> IO ()
send :: Socket a -> [Flag] -> ByteString -> IO ()
send sock :: Socket a
sock fls :: [Flag]
fls val :: ByteString
val = IO Message -> (Message -> IO ()) -> (Message -> IO ()) -> IO ()
forall a b c. IO a -> (a -> IO b) -> (a -> IO c) -> IO c
bracketOnError (ByteString -> IO Message
messageOf ByteString
val) Message -> IO ()
messageClose ((Message -> IO ()) -> IO ()) -> (Message -> IO ()) -> IO ()
forall a b. (a -> b) -> a -> b
$ \m :: Message
m -> do
String -> Socket a -> (ZMQCtx -> IO ()) -> IO ()
forall a b. String -> Socket a -> (ZMQCtx -> IO b) -> IO b
onSocket "send" Socket a
sock ((ZMQCtx -> IO ()) -> IO ()) -> (ZMQCtx -> IO ()) -> IO ()
forall a b. (a -> b) -> a -> b
$ \s :: ZMQCtx
s ->
String -> IO () -> IO CInt -> IO ()
retry "send" (Socket a -> IO ()
forall a. Socket a -> IO ()
waitWrite Socket a
sock) (IO CInt -> IO ()) -> IO CInt -> IO ()
forall a b. (a -> b) -> a -> b
$
#ifdef mingw32_HOST_OS
c_zmq_sendmsg s (msgPtr m) (combineFlags fls)
#else
ZMQCtx -> ZMQMsgPtr -> CInt -> IO CInt
c_zmq_sendmsg ZMQCtx
s (Message -> ZMQMsgPtr
msgPtr Message
m) ([Flag] -> CInt
combineFlags (Flag
DontWait Flag -> [Flag] -> [Flag]
forall a. a -> [a] -> [a]
: [Flag]
fls))
#endif
Message -> IO ()
messageFree Message
m
send' :: Sender a => Socket a -> [Flag] -> LB.ByteString -> IO ()
send' :: Socket a -> [Flag] -> ByteString -> IO ()
send' sock :: Socket a
sock fls :: [Flag]
fls val :: ByteString
val = IO Message -> (Message -> IO ()) -> (Message -> IO ()) -> IO ()
forall a b c. IO a -> (a -> IO b) -> (a -> IO c) -> IO c
bracketOnError (ByteString -> IO Message
messageOfLazy ByteString
val) Message -> IO ()
messageClose ((Message -> IO ()) -> IO ()) -> (Message -> IO ()) -> IO ()
forall a b. (a -> b) -> a -> b
$ \m :: Message
m -> do
String -> Socket a -> (ZMQCtx -> IO ()) -> IO ()
forall a b. String -> Socket a -> (ZMQCtx -> IO b) -> IO b
onSocket "send'" Socket a
sock ((ZMQCtx -> IO ()) -> IO ()) -> (ZMQCtx -> IO ()) -> IO ()
forall a b. (a -> b) -> a -> b
$ \s :: ZMQCtx
s ->
String -> IO () -> IO CInt -> IO ()
retry "send'" (Socket a -> IO ()
forall a. Socket a -> IO ()
waitWrite Socket a
sock) (IO CInt -> IO ()) -> IO CInt -> IO ()
forall a b. (a -> b) -> a -> b
$
#ifdef mingw32_HOST_OS
c_zmq_sendmsg s (msgPtr m) (combineFlags fls)
#else
ZMQCtx -> ZMQMsgPtr -> CInt -> IO CInt
c_zmq_sendmsg ZMQCtx
s (Message -> ZMQMsgPtr
msgPtr Message
m) ([Flag] -> CInt
combineFlags (Flag
DontWait Flag -> [Flag] -> [Flag]
forall a. a -> [a] -> [a]
: [Flag]
fls))
#endif
Message -> IO ()
messageFree Message
m
sendMulti :: Sender a => Socket a -> NonEmpty SB.ByteString -> IO ()
sendMulti :: Socket a -> NonEmpty ByteString -> IO ()
sendMulti sock :: Socket a
sock msgs :: NonEmpty ByteString
msgs = do
(ByteString -> IO ()) -> [ByteString] -> IO ()
forall (t :: * -> *) (m :: * -> *) a b.
(Foldable t, Monad m) =>
(a -> m b) -> t a -> m ()
mapM_ (Socket a -> [Flag] -> ByteString -> IO ()
forall a. Sender a => Socket a -> [Flag] -> ByteString -> IO ()
send Socket a
sock [Flag
SendMore]) (NonEmpty ByteString -> [ByteString]
forall a. NonEmpty a -> [a]
S.init NonEmpty ByteString
msgs)
Socket a -> [Flag] -> ByteString -> IO ()
forall a. Sender a => Socket a -> [Flag] -> ByteString -> IO ()
send Socket a
sock [] (NonEmpty ByteString -> ByteString
forall a. NonEmpty a -> a
S.last NonEmpty ByteString
msgs)
receive :: Receiver a => Socket a -> IO (SB.ByteString)
receive :: Socket a -> IO ByteString
receive sock :: Socket a
sock = IO Message
-> (Message -> IO ())
-> (Message -> IO ByteString)
-> IO ByteString
forall a b c. IO a -> (a -> IO b) -> (a -> IO c) -> IO c
bracket IO Message
messageInit Message -> IO ()
messageClose ((Message -> IO ByteString) -> IO ByteString)
-> (Message -> IO ByteString) -> IO ByteString
forall a b. (a -> b) -> a -> b
$ \m :: Message
m ->
String -> Socket a -> (ZMQCtx -> IO ByteString) -> IO ByteString
forall a b. String -> Socket a -> (ZMQCtx -> IO b) -> IO b
onSocket "receive" Socket a
sock ((ZMQCtx -> IO ByteString) -> IO ByteString)
-> (ZMQCtx -> IO ByteString) -> IO ByteString
forall a b. (a -> b) -> a -> b
$ \s :: ZMQCtx
s -> do
String -> IO () -> IO CInt -> IO ()
retry "receive" (Socket a -> IO ()
forall a. Socket a -> IO ()
waitRead Socket a
sock) (IO CInt -> IO ()) -> IO CInt -> IO ()
forall a b. (a -> b) -> a -> b
$
#ifdef mingw32_HOST_OS
c_zmq_recvmsg s (msgPtr m) 0
#else
ZMQCtx -> ZMQMsgPtr -> CInt -> IO CInt
c_zmq_recvmsg ZMQCtx
s (Message -> ZMQMsgPtr
msgPtr Message
m) (ZMQFlag -> CInt
flagVal ZMQFlag
dontWait)
#endif
CString
data_ptr <- ZMQMsgPtr -> IO CString
forall a. ZMQMsgPtr -> IO (Ptr a)
c_zmq_msg_data (Message -> ZMQMsgPtr
msgPtr Message
m)
CSize
size <- ZMQMsgPtr -> IO CSize
c_zmq_msg_size (Message -> ZMQMsgPtr
msgPtr Message
m)
CStringLen -> IO ByteString
SB.packCStringLen (CString
data_ptr, CSize -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral CSize
size)
receiveMulti :: Receiver a => Socket a -> IO [SB.ByteString]
receiveMulti :: Socket a -> IO [ByteString]
receiveMulti sock :: Socket a
sock = [ByteString] -> IO [ByteString]
recvall []
where
recvall :: [ByteString] -> IO [ByteString]
recvall acc :: [ByteString]
acc = do
ByteString
msg <- Socket a -> IO ByteString
forall a. Receiver a => Socket a -> IO ByteString
receive Socket a
sock
Socket a -> IO Bool
forall a. Socket a -> IO Bool
moreToReceive Socket a
sock IO Bool -> (Bool -> IO [ByteString]) -> IO [ByteString]
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= [ByteString] -> Bool -> IO [ByteString]
next (ByteString
msgByteString -> [ByteString] -> [ByteString]
forall a. a -> [a] -> [a]
:[ByteString]
acc)
next :: [ByteString] -> Bool -> IO [ByteString]
next acc :: [ByteString]
acc True = [ByteString] -> IO [ByteString]
recvall [ByteString]
acc
next acc :: [ByteString]
acc False = [ByteString] -> IO [ByteString]
forall (m :: * -> *) a. Monad m => a -> m a
return ([ByteString] -> [ByteString]
forall a. [a] -> [a]
reverse [ByteString]
acc)
socketMonitor :: [EventType] -> String -> Socket a -> IO ()
socketMonitor :: [EventType] -> String -> Socket a -> IO ()
socketMonitor es :: [EventType]
es addr :: String
addr soc :: Socket a
soc = String -> Socket a -> (ZMQCtx -> IO ()) -> IO ()
forall a b. String -> Socket a -> (ZMQCtx -> IO b) -> IO b
onSocket "socketMonitor" Socket a
soc ((ZMQCtx -> IO ()) -> IO ()) -> (ZMQCtx -> IO ()) -> IO ()
forall a b. (a -> b) -> a -> b
$ \s :: ZMQCtx
s ->
String -> (CString -> IO ()) -> IO ()
forall a. String -> (CString -> IO a) -> IO a
withCString String
addr ((CString -> IO ()) -> IO ()) -> (CString -> IO ()) -> IO ()
forall a b. (a -> b) -> a -> b
$ \a :: CString
a ->
String -> IO CInt -> IO ()
forall a. (Eq a, Num a) => String -> IO a -> IO ()
throwIfMinus1_ "zmq_socket_monitor" (IO CInt -> IO ()) -> IO CInt -> IO ()
forall a b. (a -> b) -> a -> b
$
ZMQCtx -> CString -> CInt -> IO CInt
c_zmq_socket_monitor ZMQCtx
s CString
a ([EventType] -> CInt
events2cint [EventType]
es)
monitor :: [EventType] -> Context -> Socket a -> IO (Bool -> IO (Maybe EventMsg))
monitor :: [EventType]
-> Context -> Socket a -> IO (Bool -> IO (Maybe EventMsg))
monitor es :: [EventType]
es ctx :: Context
ctx sock :: Socket a
sock = do
let addr :: String
addr = "inproc://" String -> ShowS
forall a. [a] -> [a] -> [a]
++ ZMQCtx -> String
forall a. Show a => a -> String
show (SocketRepr -> ZMQCtx
_socket (SocketRepr -> ZMQCtx)
-> (Socket a -> SocketRepr) -> Socket a -> ZMQCtx
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Socket a -> SocketRepr
forall a. Socket a -> SocketRepr
_socketRepr (Socket a -> ZMQCtx) -> Socket a -> ZMQCtx
forall a b. (a -> b) -> a -> b
$ Socket a
sock)
Socket Pair
s <- Context -> Pair -> IO (Socket Pair)
forall a. SocketType a => Context -> a -> IO (Socket a)
socket Context
ctx Pair
Pair
[EventType] -> String -> Socket a -> IO ()
forall a. [EventType] -> String -> Socket a -> IO ()
socketMonitor [EventType]
es String
addr Socket a
sock
Socket Pair -> String -> IO ()
forall a. Socket a -> String -> IO ()
connect Socket Pair
s String
addr
Socket Pair -> Message -> Bool -> IO (Maybe EventMsg)
forall a.
Receiver a =>
Socket a -> Message -> Bool -> IO (Maybe EventMsg)
next Socket Pair
s (Message -> Bool -> IO (Maybe EventMsg))
-> IO Message -> IO (Bool -> IO (Maybe EventMsg))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> IO Message
messageInit
where
next :: Socket a -> Message -> Bool -> IO (Maybe EventMsg)
next soc :: Socket a
soc m :: Message
m False = Message -> IO ()
messageClose Message
m IO () -> IO () -> IO ()
forall a b. IO a -> IO b -> IO a
`finally` Socket a -> IO ()
forall a. Socket a -> IO ()
close Socket a
soc IO () -> IO (Maybe EventMsg) -> IO (Maybe EventMsg)
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> Maybe EventMsg -> IO (Maybe EventMsg)
forall (m :: * -> *) a. Monad m => a -> m a
return Maybe EventMsg
forall a. Maybe a
Nothing
next soc :: Socket a
soc m :: Message
m True = String
-> Socket a
-> (ZMQCtx -> IO (Maybe EventMsg))
-> IO (Maybe EventMsg)
forall a b. String -> Socket a -> (ZMQCtx -> IO b) -> IO b
onSocket "recv" Socket a
soc ((ZMQCtx -> IO (Maybe EventMsg)) -> IO (Maybe EventMsg))
-> (ZMQCtx -> IO (Maybe EventMsg)) -> IO (Maybe EventMsg)
forall a b. (a -> b) -> a -> b
$ \s :: ZMQCtx
s -> do
String -> IO () -> IO CInt -> IO ()
retry "recv" (Socket a -> IO ()
forall a. Socket a -> IO ()
waitRead Socket a
soc) (IO CInt -> IO ()) -> IO CInt -> IO ()
forall a b. (a -> b) -> a -> b
$
#ifdef mingw32_HOST_OS
c_zmq_recvmsg s (msgPtr m) 0
#else
ZMQCtx -> ZMQMsgPtr -> CInt -> IO CInt
c_zmq_recvmsg ZMQCtx
s (Message -> ZMQMsgPtr
msgPtr Message
m) (ZMQFlag -> CInt
flagVal ZMQFlag
dontWait)
#endif
ZMQEvent
evt <- ZMQMsgPtr -> IO ZMQEvent
peekZMQEvent (Message -> ZMQMsgPtr
msgPtr Message
m)
ByteString
str <- Socket a -> IO ByteString
forall a. Receiver a => Socket a -> IO ByteString
receive Socket a
soc
Maybe EventMsg -> IO (Maybe EventMsg)
forall (m :: * -> *) a. Monad m => a -> m a
return (Maybe EventMsg -> IO (Maybe EventMsg))
-> (EventMsg -> Maybe EventMsg) -> EventMsg -> IO (Maybe EventMsg)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. EventMsg -> Maybe EventMsg
forall a. a -> Maybe a
Just (EventMsg -> IO (Maybe EventMsg))
-> EventMsg -> IO (Maybe EventMsg)
forall a b. (a -> b) -> a -> b
$ ByteString -> ZMQEvent -> EventMsg
eventMessage ByteString
str ZMQEvent
evt
poll :: (SocketLike s, MonadIO m) => Timeout -> [Poll s m] -> m [[Event]]
poll :: Int64 -> [Poll s m] -> m [[Event]]
poll _ [] = [[Event]] -> m [[Event]]
forall (m :: * -> *) a. Monad m => a -> m a
return []
poll to :: Int64
to desc :: [Poll s m]
desc = do
let len :: Int
len = [Poll s m] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length [Poll s m]
desc
let ps :: [ZMQPoll]
ps = (Poll s m -> ZMQPoll) -> [Poll s m] -> [ZMQPoll]
forall a b. (a -> b) -> [a] -> [b]
map Poll s m -> ZMQPoll
forall (s :: * -> *) (m :: * -> *).
(SocketLike s, MonadIO m) =>
Poll s m -> ZMQPoll
toZMQPoll [Poll s m]
desc
[ZMQPoll]
ps' <- IO [ZMQPoll] -> m [ZMQPoll]
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO [ZMQPoll] -> m [ZMQPoll]) -> IO [ZMQPoll] -> m [ZMQPoll]
forall a b. (a -> b) -> a -> b
$ [ZMQPoll] -> (Ptr ZMQPoll -> IO [ZMQPoll]) -> IO [ZMQPoll]
forall a b. Storable a => [a] -> (Ptr a -> IO b) -> IO b
withArray [ZMQPoll]
ps ((Ptr ZMQPoll -> IO [ZMQPoll]) -> IO [ZMQPoll])
-> (Ptr ZMQPoll -> IO [ZMQPoll]) -> IO [ZMQPoll]
forall a b. (a -> b) -> a -> b
$ \ptr :: Ptr ZMQPoll
ptr -> do
String -> IO CInt -> IO ()
forall a. (Eq a, Num a) => String -> IO a -> IO ()
throwIfMinus1Retry_ "poll" (IO CInt -> IO ()) -> IO CInt -> IO ()
forall a b. (a -> b) -> a -> b
$
Ptr ZMQPoll -> CInt -> CLong -> IO CInt
c_zmq_poll Ptr ZMQPoll
ptr (Int -> CInt
forall a b. (Integral a, Num b) => a -> b
fromIntegral Int
len) (Int64 -> CLong
forall a b. (Integral a, Num b) => a -> b
fromIntegral Int64
to)
Int -> Ptr ZMQPoll -> IO [ZMQPoll]
forall a. Storable a => Int -> Ptr a -> IO [a]
peekArray Int
len Ptr ZMQPoll
ptr
((Poll s m, ZMQPoll) -> m [Event])
-> [(Poll s m, ZMQPoll)] -> m [[Event]]
forall (t :: * -> *) (m :: * -> *) a b.
(Traversable t, Monad m) =>
(a -> m b) -> t a -> m (t b)
mapM (Poll s m, ZMQPoll) -> m [Event]
forall (s :: * -> *) (m :: * -> *).
(SocketLike s, MonadIO m) =>
(Poll s m, ZMQPoll) -> m [Event]
fromZMQPoll ([Poll s m] -> [ZMQPoll] -> [(Poll s m, ZMQPoll)]
forall a b. [a] -> [b] -> [(a, b)]
zip [Poll s m]
desc [ZMQPoll]
ps')
where
toZMQPoll :: (SocketLike s, MonadIO m) => Poll s m -> ZMQPoll
toZMQPoll :: Poll s m -> ZMQPoll
toZMQPoll (Sock s :: s t
s e :: [Event]
e _) =
ZMQCtx -> CInt -> CShort -> CShort -> ZMQPoll
ZMQPoll (SocketRepr -> ZMQCtx
_socket (SocketRepr -> ZMQCtx) -> (s t -> SocketRepr) -> s t -> ZMQCtx
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Socket t -> SocketRepr
forall a. Socket a -> SocketRepr
_socketRepr (Socket t -> SocketRepr) -> (s t -> Socket t) -> s t -> SocketRepr
forall b c a. (b -> c) -> (a -> b) -> a -> c
. s t -> Socket t
forall (s :: * -> *) t. SocketLike s => s t -> Socket t
toSocket (s t -> ZMQCtx) -> s t -> ZMQCtx
forall a b. (a -> b) -> a -> b
$ s t
s) 0 ([CShort] -> CShort
forall i. (Integral i, Bits i) => [i] -> i
combine ((Event -> CShort) -> [Event] -> [CShort]
forall a b. (a -> b) -> [a] -> [b]
map Event -> CShort
fromEvent [Event]
e)) 0
toZMQPoll (File (Fd s :: CInt
s) e :: [Event]
e _) =
ZMQCtx -> CInt -> CShort -> CShort -> ZMQPoll
ZMQPoll ZMQCtx
forall a. Ptr a
nullPtr (CInt -> CInt
forall a b. (Integral a, Num b) => a -> b
fromIntegral CInt
s) ([CShort] -> CShort
forall i. (Integral i, Bits i) => [i] -> i
combine ((Event -> CShort) -> [Event] -> [CShort]
forall a b. (a -> b) -> [a] -> [b]
map Event -> CShort
fromEvent [Event]
e)) 0
fromZMQPoll :: (SocketLike s, MonadIO m) => (Poll s m, ZMQPoll) -> m [Event]
fromZMQPoll :: (Poll s m, ZMQPoll) -> m [Event]
fromZMQPoll (p :: Poll s m
p, zp :: ZMQPoll
zp) = do
let e :: [Event]
e = Word32 -> [Event]
toEvents (Word32 -> [Event]) -> (ZMQPoll -> Word32) -> ZMQPoll -> [Event]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CShort -> Word32
forall a b. (Integral a, Num b) => a -> b
fromIntegral (CShort -> Word32) -> (ZMQPoll -> CShort) -> ZMQPoll -> Word32
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ZMQPoll -> CShort
pRevents (ZMQPoll -> [Event]) -> ZMQPoll -> [Event]
forall a b. (a -> b) -> a -> b
$ ZMQPoll
zp
let (e' :: [Event]
e', f :: Maybe ([Event] -> m ())
f) = case Poll s m
p of
(Sock _ x :: [Event]
x g :: Maybe ([Event] -> m ())
g) -> ([Event]
x, Maybe ([Event] -> m ())
g)
(File _ x :: [Event]
x g :: Maybe ([Event] -> m ())
g) -> ([Event]
x, Maybe ([Event] -> m ())
g)
Maybe ([Event] -> m ())
-> (([Event] -> m ()) -> m ()) -> m (Maybe ())
forall (t :: * -> *) (m :: * -> *) a b.
(Traversable t, Monad m) =>
t a -> (a -> m b) -> m (t b)
forM Maybe ([Event] -> m ())
f (Bool -> m () -> m ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless ([Event] -> Bool
forall (t :: * -> *) a. Foldable t => t a -> Bool
P.null ([Event]
e [Event] -> [Event] -> [Event]
forall a. Eq a => [a] -> [a] -> [a]
`intersect` [Event]
e')) (m () -> m ())
-> (([Event] -> m ()) -> m ()) -> ([Event] -> m ()) -> m ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (([Event] -> m ()) -> [Event] -> m ()
forall a b. (a -> b) -> a -> b
$ [Event]
e)) m (Maybe ()) -> m [Event] -> m [Event]
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> [Event] -> m [Event]
forall (m :: * -> *) a. Monad m => a -> m a
return [Event]
e
fromEvent :: Event -> CShort
fromEvent :: Event -> CShort
fromEvent In = CShort -> CShort
forall a b. (Integral a, Num b) => a -> b
fromIntegral (CShort -> CShort)
-> (ZMQPollEvent -> CShort) -> ZMQPollEvent -> CShort
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ZMQPollEvent -> CShort
pollVal (ZMQPollEvent -> CShort) -> ZMQPollEvent -> CShort
forall a b. (a -> b) -> a -> b
$ ZMQPollEvent
pollIn
fromEvent Out = CShort -> CShort
forall a b. (Integral a, Num b) => a -> b
fromIntegral (CShort -> CShort)
-> (ZMQPollEvent -> CShort) -> ZMQPollEvent -> CShort
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ZMQPollEvent -> CShort
pollVal (ZMQPollEvent -> CShort) -> ZMQPollEvent -> CShort
forall a b. (a -> b) -> a -> b
$ ZMQPollEvent
pollOut
fromEvent Err = CShort -> CShort
forall a b. (Integral a, Num b) => a -> b
fromIntegral (CShort -> CShort)
-> (ZMQPollEvent -> CShort) -> ZMQPollEvent -> CShort
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ZMQPollEvent -> CShort
pollVal (ZMQPollEvent -> CShort) -> ZMQPollEvent -> CShort
forall a b. (a -> b) -> a -> b
$ ZMQPollEvent
pollerr
toEvents :: Word32 -> [Event]
toEvents :: Word32 -> [Event]
toEvents e :: Word32
e = ([Event] -> (Word32 -> [Event] -> [Event]) -> [Event])
-> [Event] -> [Word32 -> [Event] -> [Event]] -> [Event]
forall (t :: * -> *) b a.
Foldable t =>
(b -> a -> b) -> b -> t a -> b
foldl' (\es :: [Event]
es f :: Word32 -> [Event] -> [Event]
f -> Word32 -> [Event] -> [Event]
f Word32
e [Event]
es) [] [Word32 -> [Event] -> [Event]]
tests
where
tests :: [Word32 -> [Event] -> [Event]]
tests =
[ \i :: Word32
i xs :: [Event]
xs -> if Word32
i Word32 -> Word32 -> Word32
forall a. Bits a => a -> a -> a
.&. (CShort -> Word32
forall a b. (Integral a, Num b) => a -> b
fromIntegral (CShort -> Word32)
-> (ZMQPollEvent -> CShort) -> ZMQPollEvent -> Word32
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ZMQPollEvent -> CShort
pollVal (ZMQPollEvent -> Word32) -> ZMQPollEvent -> Word32
forall a b. (a -> b) -> a -> b
$ ZMQPollEvent
pollIn) Word32 -> Word32 -> Bool
forall a. Eq a => a -> a -> Bool
/= 0 then Event
InEvent -> [Event] -> [Event]
forall a. a -> [a] -> [a]
:[Event]
xs else [Event]
xs
, \i :: Word32
i xs :: [Event]
xs -> if Word32
i Word32 -> Word32 -> Word32
forall a. Bits a => a -> a -> a
.&. (CShort -> Word32
forall a b. (Integral a, Num b) => a -> b
fromIntegral (CShort -> Word32)
-> (ZMQPollEvent -> CShort) -> ZMQPollEvent -> Word32
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ZMQPollEvent -> CShort
pollVal (ZMQPollEvent -> Word32) -> ZMQPollEvent -> Word32
forall a b. (a -> b) -> a -> b
$ ZMQPollEvent
pollOut) Word32 -> Word32 -> Bool
forall a. Eq a => a -> a -> Bool
/= 0 then Event
OutEvent -> [Event] -> [Event]
forall a. a -> [a] -> [a]
:[Event]
xs else [Event]
xs
, \i :: Word32
i xs :: [Event]
xs -> if Word32
i Word32 -> Word32 -> Word32
forall a. Bits a => a -> a -> a
.&. (CShort -> Word32
forall a b. (Integral a, Num b) => a -> b
fromIntegral (CShort -> Word32)
-> (ZMQPollEvent -> CShort) -> ZMQPollEvent -> Word32
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ZMQPollEvent -> CShort
pollVal (ZMQPollEvent -> Word32) -> ZMQPollEvent -> Word32
forall a b. (a -> b) -> a -> b
$ ZMQPollEvent
pollerr) Word32 -> Word32 -> Bool
forall a. Eq a => a -> a -> Bool
/= 0 then Event
ErrEvent -> [Event] -> [Event]
forall a. a -> [a] -> [a]
:[Event]
xs else [Event]
xs
]
retry :: String -> IO () -> IO CInt -> IO ()
retry :: String -> IO () -> IO CInt -> IO ()
retry msg :: String
msg wait :: IO ()
wait act :: IO CInt
act = String -> IO CInt -> IO () -> IO ()
forall a b. (Eq a, Num a) => String -> IO a -> IO b -> IO ()
throwIfMinus1RetryMayBlock_ String
msg IO CInt
act IO ()
wait
wait' :: ZMQPollEvent -> Socket a -> IO ()
#ifdef mingw32_HOST_OS
wait' _ _ = return ()
#else
wait' :: ZMQPollEvent -> Socket a -> IO ()
wait' p :: ZMQPollEvent
p s :: Socket a
s = do
Int
e <- ZMQOption -> Socket a -> IO Int
forall a. ZMQOption -> Socket a -> IO Int
getInt32Option ZMQOption
B.events Socket a
s
Bool -> IO () -> IO ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless (Int -> Bool
testev Int
e) (IO () -> IO ()) -> IO () -> IO ()
forall a b. (a -> b) -> a -> b
$ do
CInt
fd <- Socket a -> ZMQOption -> CInt -> IO CInt
forall b a.
(Storable b, Integral b) =>
Socket a -> ZMQOption -> b -> IO b
getIntOpt Socket a
s ZMQOption
B.filedesc 0
Fd -> IO ()
threadWaitRead (CInt -> Fd
Fd CInt
fd)
ZMQPollEvent -> Socket a -> IO ()
forall a. ZMQPollEvent -> Socket a -> IO ()
wait' ZMQPollEvent
p Socket a
s
where
testev :: Int -> Bool
testev e :: Int
e = Int
e Int -> Int -> Int
forall a. Bits a => a -> a -> a
.&. CShort -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (ZMQPollEvent -> CShort
pollVal ZMQPollEvent
p) Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
/= 0
#endif
waitRead :: Socket a -> IO ()
waitRead :: Socket a -> IO ()
waitRead = ZMQPollEvent -> Socket a -> IO ()
forall a. ZMQPollEvent -> Socket a -> IO ()
wait' ZMQPollEvent
pollIn
waitWrite :: Socket a -> IO ()
waitWrite :: Socket a -> IO ()
waitWrite = ZMQPollEvent -> Socket a -> IO ()
forall a. ZMQPollEvent -> Socket a -> IO ()
wait' ZMQPollEvent
pollOut
proxy :: Socket a -> Socket b -> Maybe (Socket c) -> IO ()
proxy :: Socket a -> Socket b -> Maybe (Socket c) -> IO ()
proxy front :: Socket a
front back :: Socket b
back capture :: Maybe (Socket c)
capture =
String -> Socket a -> (ZMQCtx -> IO ()) -> IO ()
forall a b. String -> Socket a -> (ZMQCtx -> IO b) -> IO b
onSocket "proxy-front" Socket a
front ((ZMQCtx -> IO ()) -> IO ()) -> (ZMQCtx -> IO ()) -> IO ()
forall a b. (a -> b) -> a -> b
$ \f :: ZMQCtx
f ->
String -> Socket b -> (ZMQCtx -> IO ()) -> IO ()
forall a b. String -> Socket a -> (ZMQCtx -> IO b) -> IO b
onSocket "proxy-back" Socket b
back ((ZMQCtx -> IO ()) -> IO ()) -> (ZMQCtx -> IO ()) -> IO ()
forall a b. (a -> b) -> a -> b
$ \b :: ZMQCtx
b ->
String -> IO CInt -> IO ()
forall a. (Eq a, Num a) => String -> IO a -> IO ()
throwIfMinus1Retry_ "c_zmq_proxy" (IO CInt -> IO ()) -> IO CInt -> IO ()
forall a b. (a -> b) -> a -> b
$ ZMQCtx -> ZMQCtx -> ZMQCtx -> IO CInt
c_zmq_proxy ZMQCtx
f ZMQCtx
b ZMQCtx
c
where
c :: ZMQCtx
c = ZMQCtx -> (Socket c -> ZMQCtx) -> Maybe (Socket c) -> ZMQCtx
forall b a. b -> (a -> b) -> Maybe a -> b
maybe ZMQCtx
forall a. Ptr a
nullPtr (SocketRepr -> ZMQCtx
_socket (SocketRepr -> ZMQCtx)
-> (Socket c -> SocketRepr) -> Socket c -> ZMQCtx
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Socket c -> SocketRepr
forall a. Socket a -> SocketRepr
_socketRepr) Maybe (Socket c)
capture
curveKeyPair :: MonadIO m => m (Restricted Div5 SB.ByteString, Restricted Div5 SB.ByteString)
curveKeyPair :: m (Restricted Div5 ByteString, Restricted Div5 ByteString)
curveKeyPair = IO (Restricted Div5 ByteString, Restricted Div5 ByteString)
-> m (Restricted Div5 ByteString, Restricted Div5 ByteString)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Restricted Div5 ByteString, Restricted Div5 ByteString)
-> m (Restricted Div5 ByteString, Restricted Div5 ByteString))
-> IO (Restricted Div5 ByteString, Restricted Div5 ByteString)
-> m (Restricted Div5 ByteString, Restricted Div5 ByteString)
forall a b. (a -> b) -> a -> b
$
Int
-> (CString
-> IO (Restricted Div5 ByteString, Restricted Div5 ByteString))
-> IO (Restricted Div5 ByteString, Restricted Div5 ByteString)
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes 41 ((CString
-> IO (Restricted Div5 ByteString, Restricted Div5 ByteString))
-> IO (Restricted Div5 ByteString, Restricted Div5 ByteString))
-> (CString
-> IO (Restricted Div5 ByteString, Restricted Div5 ByteString))
-> IO (Restricted Div5 ByteString, Restricted Div5 ByteString)
forall a b. (a -> b) -> a -> b
$ \cstr1 :: CString
cstr1 ->
Int
-> (CString
-> IO (Restricted Div5 ByteString, Restricted Div5 ByteString))
-> IO (Restricted Div5 ByteString, Restricted Div5 ByteString)
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes 41 ((CString
-> IO (Restricted Div5 ByteString, Restricted Div5 ByteString))
-> IO (Restricted Div5 ByteString, Restricted Div5 ByteString))
-> (CString
-> IO (Restricted Div5 ByteString, Restricted Div5 ByteString))
-> IO (Restricted Div5 ByteString, Restricted Div5 ByteString)
forall a b. (a -> b) -> a -> b
$ \cstr2 :: CString
cstr2 -> do
String -> IO CInt -> IO ()
forall a. (Eq a, Num a) => String -> IO a -> IO ()
throwIfMinus1_ "c_zmq_curve_keypair" (IO CInt -> IO ()) -> IO CInt -> IO ()
forall a b. (a -> b) -> a -> b
$ CString -> CString -> IO CInt
c_zmq_curve_keypair CString
cstr1 CString
cstr2
Maybe (Restricted Div5 ByteString)
public <- ByteString -> Maybe (Restricted Div5 ByteString)
forall r v. Restriction r v => v -> Maybe (Restricted r v)
toRestricted (ByteString -> Maybe (Restricted Div5 ByteString))
-> IO ByteString -> IO (Maybe (Restricted Div5 ByteString))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> CString -> IO ByteString
SB.packCString CString
cstr1
Maybe (Restricted Div5 ByteString)
private <- ByteString -> Maybe (Restricted Div5 ByteString)
forall r v. Restriction r v => v -> Maybe (Restricted r v)
toRestricted (ByteString -> Maybe (Restricted Div5 ByteString))
-> IO ByteString -> IO (Maybe (Restricted Div5 ByteString))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> CString -> IO ByteString
SB.packCString CString
cstr2
IO (Restricted Div5 ByteString, Restricted Div5 ByteString)
-> ((Restricted Div5 ByteString, Restricted Div5 ByteString)
-> IO (Restricted Div5 ByteString, Restricted Div5 ByteString))
-> Maybe (Restricted Div5 ByteString, Restricted Div5 ByteString)
-> IO (Restricted Div5 ByteString, Restricted Div5 ByteString)
forall b a. b -> (a -> b) -> Maybe a -> b
maybe (String
-> IO (Restricted Div5 ByteString, Restricted Div5 ByteString)
forall (m :: * -> *) a. MonadFail m => String -> m a
fail String
errmsg) (Restricted Div5 ByteString, Restricted Div5 ByteString)
-> IO (Restricted Div5 ByteString, Restricted Div5 ByteString)
forall (m :: * -> *) a. Monad m => a -> m a
return ((,) (Restricted Div5 ByteString
-> Restricted Div5 ByteString
-> (Restricted Div5 ByteString, Restricted Div5 ByteString))
-> Maybe (Restricted Div5 ByteString)
-> Maybe
(Restricted Div5 ByteString
-> (Restricted Div5 ByteString, Restricted Div5 ByteString))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe (Restricted Div5 ByteString)
public Maybe
(Restricted Div5 ByteString
-> (Restricted Div5 ByteString, Restricted Div5 ByteString))
-> Maybe (Restricted Div5 ByteString)
-> Maybe (Restricted Div5 ByteString, Restricted Div5 ByteString)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Maybe (Restricted Div5 ByteString)
private)
where
errmsg :: String
errmsg = "curveKeyPair: invalid key-lengths produced"