module Game.GoreAndAsh.Network.Message(
Message(..)
, MessageType(..)
, messageToPacket
) where
import Control.DeepSeq
import GHC.Generics
import Network.ENet
import qualified Data.BitSet.Generic as B
import qualified Data.ByteString as BS
import qualified Network.ENet.Bindings as B
data MessageType =
ReliableMessage
| UnreliableMessage
| UnsequencedMessage
| UnreliableFragmentedMessage
| UnsequencedFragmentedMessage
deriving (Eq, Ord, Bounded, Enum, Show, Generic)
instance NFData MessageType
messageTypeToBits :: MessageType -> PacketFlagSet
messageTypeToBits t = case t of
ReliableMessage -> B.singleton B.Reliable
UnsequencedMessage -> B.singleton B.Unsequenced
UnsequencedFragmentedMessage -> B.UnreliableFragment `B.insert` B.singleton B.Unsequenced
UnreliableMessage -> B.empty
UnreliableFragmentedMessage -> B.singleton B.UnreliableFragment
data Message = Message {
messageType :: !MessageType
, messagePayload :: !BS.ByteString
} deriving (Show, Generic)
instance NFData Message
messageToPacket :: Message -> Packet
messageToPacket (Message mt p) = Packet (messageTypeToBits mt) p