henet-1.3.9.0: src/Network/ENet/Packet.hs
module Network.ENet.Packet where
import Foreign
import Foreign.C.Error
import Foreign.C.Types
import Data.BitSet.Generic(BitSet(getBits))
import qualified Data.ByteString as SB
import qualified Data.ByteString.Unsafe as SB
import qualified Network.ENet.Bindings as B
type PacketFlagSet = BitSet Word32 B.PacketFlag
-- String is defensively coppied, so unsafe is appropriate
create :: SB.ByteString -> PacketFlagSet -> IO (Ptr B.Packet)
create bytes flags = SB.unsafeUseAsCStringLen bytes $ \(ptr,len) ->
B.packetCreate (castPtr ptr) (fromIntegral len) $ getBits flags
destroy :: Ptr B.Packet -> IO ()
destroy = B.packetDestroy
resize :: Ptr B.Packet -> CSize -> IO ()
resize ptr size = do _ <- throwErrnoIf -- explicity throw away return after
(/=0)
"Packet could not be resized"
$ B.packetResize ptr size
return ()