template <typename Stream> bool ConnectionPacket::Serialize( Stream & stream ) { ConnectionContext * context = (ConnectionContext*) stream.GetContext(); assert( context ); assert( context->magic == ConnectionContextMagic ); assert( context->messageFactory ); assert( context->connectionConfig ); // ack system bool perfect_acks = Stream::IsWriting ? ( ack_bits == 0xFFFFFFFF ) : 0; serialize_bool( stream, perfect_acks ); if ( !perfect_acks ) serialize_bits( stream, ack_bits, 32 ); else ack_bits = 0xFFFFFFFF; serialize_bits( stream, sequence, 16 ); serialize_ack_relative( stream, sequence, ack ); // channel entries const int numChannels = context->connectionConfig->numChannels; serialize_int( stream, numChannelEntries, 0, context->connectionConfig->numChannels ); #if YOJIMBO_VALIDATE_PACKET_BUDGET assert( stream.GetBitsProcessed() <= ConservativeConnectionPacketHeaderEstimate ); #endif // #if YOJIMBO_VALIDATE_PACKET_BUDGET if ( numChannelEntries > 0 ) { if ( Stream::IsReading ) { if ( !AllocateChannelData( *context->messageFactory, numChannelEntries ) ) return false; } for ( int i = 0; i < numChannelEntries; ++i ) { if ( !channelEntry[i].SerializeInternal( stream, *m_messageFactory, context->connectionConfig->channelConfig, numChannels ) ) return false; } } return true; }
void serialize_8bit(bool *b, uint8_t n) { serialize_bits(8, b, n); }
void serialize_64bit(bool *b, uint64_t n) { serialize_bits(64, b, n); }