Connection::Connection( Allocator & allocator, PacketFactory & packetFactory, MessageFactory & messageFactory, const ConnectionConfig & config ) : m_config( config ) { assert( ( 65536 % config.slidingWindowSize ) == 0 ); m_allocator = &allocator; m_packetFactory = &packetFactory; m_messageFactory = &messageFactory; m_listener = NULL; m_error = CONNECTION_ERROR_NONE; m_clientIndex = 0; memset( m_channel, 0, sizeof( m_channel ) ); assert( m_config.numChannels >= 1 ); assert( m_config.numChannels <= MaxChannels ); for ( int channelId = 0; channelId < m_config.numChannels; ++channelId ) { switch ( m_config.channelConfig[channelId].type ) { case CHANNEL_TYPE_RELIABLE_ORDERED: m_channel[channelId] = YOJIMBO_NEW( *m_allocator, ReliableOrderedChannel, *m_allocator, messageFactory, m_config.channelConfig[channelId], channelId ); break; case CHANNEL_TYPE_UNRELIABLE_UNORDERED: m_channel[channelId] = YOJIMBO_NEW( *m_allocator, UnreliableUnorderedChannel, *m_allocator, messageFactory, m_config.channelConfig[channelId], channelId ); break; default: assert( !"unknown channel type" ); } m_channel[channelId]->SetListener( this ); } m_sentPackets = YOJIMBO_NEW( *m_allocator, SequenceBuffer<ConnectionSentPacketData>, *m_allocator, m_config.slidingWindowSize ); m_receivedPackets = YOJIMBO_NEW( *m_allocator, SequenceBuffer<ConnectionReceivedPacketData>, *m_allocator, m_config.slidingWindowSize ); Reset(); }
BaseTransport::BaseTransport( Allocator & allocator, PacketFactory & packetFactory, const Address & address, uint32_t protocolId, int maxPacketSize, int sendQueueSize, int receiveQueueSize ) : m_sendQueue( allocator, sendQueueSize ), m_receiveQueue( allocator, receiveQueueSize ) { assert( protocolId != 0 ); assert( sendQueueSize > 0 ); assert( receiveQueueSize > 0 ); m_address = address; m_time = 0.0; m_flags = 0; m_context = NULL; m_allocator = &allocator; m_protocolId = protocolId; m_packetFactory = &packetFactory; m_packetProcessor = YOJIMBO_NEW( allocator, PacketProcessor, allocator, packetFactory, m_protocolId, maxPacketSize ); const int numPacketTypes = m_packetFactory->GetNumPacketTypes(); assert( numPacketTypes > 0 ); #if YOJIMBO_INSECURE_CONNECT m_allPacketTypes = (uint8_t*) m_allocator->Allocate( numPacketTypes ); #endif // #if YOJIMBO_INSECURE_CONNECT m_packetTypeIsEncrypted = (uint8_t*) m_allocator->Allocate( numPacketTypes ); m_packetTypeIsUnencrypted = (uint8_t*) m_allocator->Allocate( numPacketTypes ); #if YOJIMBO_INSECURE_CONNECT memset( m_allPacketTypes, 1, m_packetFactory->GetNumPacketTypes() ); #endif // #if YOJIMBO_INSECURE_CONNECT memset( m_packetTypeIsEncrypted, 0, m_packetFactory->GetNumPacketTypes() ); memset( m_packetTypeIsUnencrypted, 1, m_packetFactory->GetNumPacketTypes() ); memset( m_counters, 0, sizeof( m_counters ) ); }