henet-1.3.9.0: src/Network/ENet/Host.hs
module Network.ENet.Host where
import Foreign
import Foreign.C.Error
import Foreign.C.Types
import Network.Socket(SockAddr)
import Network.ENet.Internal
import qualified Network.ENet.Bindings as B
create :: Maybe SockAddr -> CSize -> CSize -> Word32 -> Word32 -> IO (Ptr B.Host)
create a c m i o = withMaybeDo (fmap toENetAddress a) $ \a' -> B.hostCreate a' c m i o
destroy :: Ptr B.Host -> IO ()
destroy = B.hostDestroy
connect :: Ptr B.Host -> SockAddr -> CSize -> Word32 -> IO (Ptr B.Peer)
connect host address channelCount datum = alloca $ \addr -> do
poke addr $ toENetAddress address
throwErrnoIf
(==nullPtr)
"could not connect to peer"
$ B.hostConnect host addr channelCount datum
checkEvents :: Ptr B.Host -> IO (Maybe B.Event)
checkEvents host = alloca $ \ptr -> do
status <- B.hostCheckEvents host ptr
case compare status 0 of
GT -> fmap Just $ peek ptr
EQ -> return $ Nothing
LT -> throwErrno "error checking events"
service :: Ptr B.Host -> Word32 -> IO (Maybe B.Event)
service host timeout = alloca $ \ptr -> do
status <- B.hostService host ptr timeout
case compare status 0 of
GT -> fmap Just $ peek ptr
EQ -> return $ Nothing
LT -> throwErrno "error servicing events"
flush :: Ptr B.Host -> IO ()
flush = B.hostFlush
broadcast :: Ptr B.Host -> B.ChannelID -> Ptr B.Packet -> IO ()
broadcast = B.hostBroadcast
compress :: Ptr B.Host -> Ptr B.Compressor -> IO ()
compress = B.hostCompress
compressWithRangeCoder :: Ptr B.Host -> IO CUInt
compressWithRangeCoder = B.hostCompressWithRangeCoder
channelLimit :: Ptr B.Host -> CSize -> IO ()
channelLimit = B.hostChannelLimit
hostBandwidthLimit :: Ptr B.Host -> Word32 -> Word32 -> IO ()
hostBandwidthLimit = B.hostBandwidthLimit