networked-game-0.1.0.0: src/NetworkedGame/Packet.hs
module NetworkedGame.Packet where
import qualified Data.ByteString.Lazy as B
import Data.Binary (Binary,encode,decode)
import Data.Int (Int64)
import System.IO (Handle, hFlush)
newtype Packet = Packet B.ByteString
mkPacket :: Binary a => a -> Packet
mkPacket x = Packet $ B.append (encode n) bs
where
n = B.length bs
bs = encode x
hPutPacket :: Handle -> Packet -> IO ()
hPutPacket h (Packet bs) = B.hPutStr h bs >> hFlush h
hGetPacketed :: Binary a => Handle -> IO a
hGetPacketed h =
do nEnc <- B.hGet h 8
let n :: Int64
n = decode nEnc
bs <- B.hGet h $ fromIntegral n
return $ decode bs