[ENet-discuss] A query about channels
M. Rijks
enet at forge.dds.nl
Mon Jan 18 06:18:13 PST 2010
I've also found the Boost class for serialization, but what most
serialization classes have in common is that they seem aimed at file
access, which means they may be somewhat less economical for
networking. The most appropriate solution will have to be custom-built.
The way I'm currently solving this is by using 16 arrays of 16
different data types (or 32 of 8, or 64 of 4, etc depending on the
project), which can be used by all messages. A message is built up of
one byte for message ID (so I know how to deal with it) and then an
arbitrary list of parameters each prepended with a byte identifying
the type (0-15) and array index (0-15) of the data chunk to come. This
way I can use one method to compose and one to decompose the
parameters regardless of the message type, and deal with the message
data by accessing the required array values, which may be different
per function.
Messages that have missing params (e.g. because the connecting party
uses an earlier version of the interface) have these parameters still
set to initial values if they aren't received, so they can be handled
accordingly. The only drawback may be that there is a slight
performance penalty in having to clear the arrays before receiving the
message.
-MR
Quoting Thorbjørn Lindeijer <bjorn at lindeijer.nl>:
> On Sun, Jan 17, 2010 at 23:22, M. Rijks <enet at forge.dds.nl> wrote:
>> Note to self: don't ask questions that can be researched. Turns out that
>> structs cannot be iterated over, let alone determining the type of a field
>> at such an index. Will take a little more effort to serialize structs, but I
>> still think it's the preferred method.
>
> Since it is indeed a little more work, there have also been solutions
> developed for this already. Personally I think this library looks nice
> for the purpose:
>
> http://tpl.sourceforge.net/ (tpl)
>
> But there are also:
>
> http://www.enlightenment.org/p.php?p=about/efl/eet&l=en (Eet)
> http://s11n.net/c11n/ (libc11n)
>
> However I prefer doing it manually since, as somebody said before,
> that makes it easier to remain backwards compatible and allows you to
> vary the contents of a message more easily.
>
> Regards,
> Bjørn
> _______________________________________________
> ENet-discuss mailing list
> ENet-discuss at cubik.org
> http://lists.cubik.org/mailman/listinfo/enet-discuss
>
More information about the ENet-discuss
mailing list