Most of the samples in randomplay.hp look like this:

BEGIN_SAMPLE 1.76
(170)Script.Array.CAF   8
(154)Script.CmdType.CAF 64
(165)Script.PickleCmd.CAF       760
(197)Script.PokerClient.CAF     8
(156)Script.Command.CAF 24
(282)Main.CAF   285752
(163)Script.Pickle.CAF  16
(311)/launchScripts#8/laun...   93464
END_SAMPLE 1.76

I'm pickling to/from unboxed arrays of Word8

type MutByteArray = IOUArray Int Word8
type ByteArray = UArray Int Word8
type Index = Int

CmdType is (Word8, Word8) that tells me what pickler to use.

PickleCmd looks like this:

puCommand :: (Word8, Word8) -> PU Command

puCommand (116, 2) =
    sequ tableID endian32
         (\a -> sequ password wstring
          (\b -> sequ localIP wstring
           (\c -> sequ affiliateID (list endian32 byte)
            (\d -> lift $
                   ClConnectGame a b c d
             ))))

puCommand (36, 1) =
...

Command has about 250 constructors for the different records that can be send/received. These records can be somewhat nested and have lists of other records inside them. Like SrvServerInfo. Could this be where the polymorphism is coming from, i.e. the "*" are my Commands that are being unpickled? Fields in command all have strictness annotations, btw.

        Thanks, Joel

--
http://wagerlabs.com/





_______________________________________________
Haskell-Cafe mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to