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; }
static int scope_serialize(Unit *u, FILE *f, FDSet *fds) { Scope *s = SCOPE(u); assert(s); assert(f); assert(fds); (void) serialize_item(f, "state", scope_state_to_string(s->state)); (void) serialize_bool(f, "was-abandoned", s->was_abandoned); if (s->controller) (void) serialize_item(f, "controller", s->controller); return 0; }