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(); }
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; } }
private void PollEvents() { if (PollEventsAtTheEnd) { while (_netEventsQueue.Empty == false) { ProcessEvent(_netEventsQueue.Dequeue()); } } }
public void SendNextPackets() { NetPacket packet; while (_outgoingPackets.Empty == false) { packet = _outgoingPackets.Dequeue(); packet.DontRecycleNow = false; _peer.SendRawData(packet); } }
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); } }