/// <summary> /// NetManager constructor /// </summary> /// <param name="listener">Network events listener</param> /// <param name="maxConnections">Maximum connections (incoming and outcoming)</param> public NetManager(INetEventListener listener, int maxConnections) { //_logicThread = new Thread(UpdateLogic) { Name = "LogicThread", IsBackground = true }; _socket = new NetSocket(ReceiveLogic); _netEventListener = listener; _netEventsQueue = new FastQueue <NetEvent>(); _netEventsPool = new Stack <NetEvent>(); NetPacketPool = new NetPacketPool(); NatPunchModule = new NatPunchModule(this); Statistics = new NetStatistics(); _peers = new NetPeerCollection(maxConnections); _connectingPeers = new HashSet <NetEndPoint>(); _maxConnections = maxConnections; _updateTimeFilter = new long[3]; // Precreate all needed Merge Packets NetPacketPool.PoolLimit = maxConnections * 100; //NetPacketPool.Prepool(maxConnections * 2, MtuStartIdx >= 0 && MtuStartIdx < NetConstants.PossibleMtu.Length ? NetConstants.PossibleMtu[MtuStartIdx] : (NetConstants.MaxPacketSize - NetConstants.FragmentHeaderSize)); //NetPacketPool.Prepool(maxConnections * 20, 16); }
private NetPeer(NetManager netManager, NetEndPoint remoteEndPoint) { Statistics = new NetStatistics(); _packetPool = netManager.NetPacketPool; _netManager = netManager; _remoteEndPoint = remoteEndPoint; _mergedPackets = new FastQueue <NetPacket>(NetConstants.DefaultWindowSize); if (netManager.MtuStartIdx >= 0 && netManager.MtuStartIdx < NetConstants.PossibleMtu.Length) { _mtuIdx = netManager.MtuStartIdx; _mtu = NetConstants.PossibleMtu[_mtuIdx]; _finishMtu = true; } _avgRtt = 0; _rtt = 0; _pingSendTimer = 0; _pingMustSend = false; if (NetManager.EnableReliableOrderedChannel) { _reliableOrderedChannels = new ReliableChannel[NetConstants.MultiChannelCount]; } if (NetManager.EnableReliableUnorderedChannel) { _reliableUnorderedChannels = new ReliableChannel[NetConstants.MultiChannelCount]; } if (NetManager.EnableSequencedChannel) { _sequencedChannels = new SequencedChannel[NetConstants.MultiChannelCount]; } if (NetManager.EnableSimpleChannel) { _simpleChannels = new SimpleChannel[NetConstants.MultiChannelCount]; } //_reliableSequencedChannels = new ReliableSequencedChannel[NetConstants.MultiChannelCount]; // Initialise default channel for (int i = 0; i < NetConstants.MultiChannelCount; ++i) { if (NetManager.EnableReliableOrderedChannel) { _reliableOrderedChannels[i] = new ReliableChannel(this, true, i); } if (NetManager.EnableReliableUnorderedChannel) { _reliableUnorderedChannels[i] = new ReliableChannel(this, false, i); } if (NetManager.EnableSequencedChannel) { _sequencedChannels[i] = new SequencedChannel(this, i); } if (NetManager.EnableSimpleChannel) { _simpleChannels[i] = new SimpleChannel(this, i); } //_reliableSequencedChannels[i] = new ReliableSequencedChannel(this, i); } _holdedFragments = new Dictionary <ushort, IncomingFragments>(); }