Пример #1
0
        public void SendNextPackets()
        {
            //Monitor.Enter(_pendingPackets);
            //get packets from queue
            //Monitor.Enter(_outgoingPackets);

            while (_outgoingPackets.Empty == false)
            {
                if (_headPendingPacket.Next != _tailPendingPacket)
                {
                    NetPacket     packet        = _outgoingPackets.Dequeue();
                    PendingPacket pendingPacket = _headPendingPacket;
                    pendingPacket.Packet = packet;
                    _localSequence       = (_localSequence + 1); // % NetConstants.MaxSequence;
                    if (_localSequence == NetConstants.MaxSequence)
                    {
                        _localSequence = 0;
                    }
                    pendingPacket.Packet.Sequence = (ushort)_localSequence;
                    _headPendingPacket            = _headPendingPacket.Next;
                }
                else //Queue filled
                {
                    break;
                }
            }
            //_outgoingPackets.RemoveRange(0, packetUsed);

            //Monitor.Exit(_outgoingPackets);

            ResendPackets();
        }
Пример #2
0
        internal void FlushMergePacket()
        {
            //If merging enabled
            if (_mergePos > 0)
            {
                if (_mergeCount > 1)
                {
                    // build the mergeData
                    NetPacket _mergeData = _packetPool.Get(PacketProperty.Merged, 0, _mergePos);
                    _mergePos   = 0;
                    _mergeCount = 0;
                    while (_mergedPackets.Empty == false)
                    {
                        _mergeCount++;
                        NetPacket packet = _mergedPackets.Dequeue();
                        FastBitConverter.GetBytes(_mergeData.RawData, _mergePos, (ushort)packet.Size);
                        Buffer.BlockCopy(packet.RawData, 0, _mergeData.RawData, _mergePos + sizeof(ushort), packet.Size);
                        _mergePos += packet.Size + sizeof(ushort);
                        packet.Recycle();
                    }
                    if (_mergeCount > 0)
                    {
                        NetUtils.DebugWrite("Send merged: " + _mergePos + ", count: " + _mergeCount);
                        _mergeData.Size     = NetPacket.GetHeaderSize(PacketProperty.Merged) + _mergePos;
                        _mergeData.Property = PacketProperty.Merged;
                        _netManager.SendRawAndRecycle(_mergeData, _remoteEndPoint);
                    }
#if STATS_ENABLED
                    Statistics.PacketsSent++;
                    Statistics.BytesSent += (ulong)(NetConstants.HeaderSize + _mergePos);
#endif
                }
                else
                {
                    NetPacket packet = _mergedPackets.Dequeue();
                    //Send without length information and merging
                    _netManager.SendRawAndRecycle(packet, _remoteEndPoint);
#if STATS_ENABLED
                    Statistics.PacketsSent++;
                    Statistics.BytesSent += (ulong)(_mergePos - 2);
#endif
                }
                _mergePos   = 0;
                _mergeCount = 0;
            }
        }
Пример #3
0
 private void PollEvents()
 {
     if (PollEventsAtTheEnd)
     {
         while (_netEventsQueue.Empty == false)
         {
             ProcessEvent(_netEventsQueue.Dequeue());
         }
     }
 }
Пример #4
0
        public void SendNextPackets()
        {
            NetPacket packet;

            while (_outgoingPackets.Empty == false)
            {
                packet = _outgoingPackets.Dequeue();
                packet.DontRecycleNow = false;
                _peer.SendRawData(packet);
            }
        }
Пример #5
0
 public void SendNextPackets()
 {
     while (_outgoingPackets.Empty == false)
     {
         NetPacket packet = _outgoingPackets.Dequeue();
         _localSequence = (_localSequence + 1); // % NetConstants.MaxSequence;
         if (_localSequence == NetConstants.MaxSequence)
         {
             _localSequence = 0;
         }
         packet.Sequence       = (ushort)_localSequence;
         packet.DontRecycleNow = false;
         _peer.SendRawData(packet);
     }
 }