public override NetSendResult Enqueue(NetOutgoingMessage message)
        {
            int queueLen = QueuedSends.Count + 1;
            int left     = GetAllowedSends();

            if (queueLen > left ||
                (message.ByteLength > _connection.CurrentMTU &&
                 _connection._peerConfiguration.UnreliableSizeBehaviour == NetUnreliableSizeBehaviour.DropAboveMTU))
            {
                _connection.Peer.Recycle(message);
                return(NetSendResult.Dropped);
            }

            if (message.BitLength >= ushort.MaxValue &&
                _connection._peerConfiguration.UnreliableSizeBehaviour == NetUnreliableSizeBehaviour.IgnoreMTU)
            {
                _connection.Peer.LogError(NetLogMessage.FromValues(NetLogCode.MessageSizeExceeded,
                                                                   endPoint: _connection,
                                                                   value: message.BitLength,
                                                                   maxValue: ushort.MaxValue));

                return(NetSendResult.Dropped);
            }

            QueuedSends.Enqueue(message);
            return(NetSendResult.Sent);
        }
 public override void Reset()
 {
     QueuedSends.Clear();
     _receivedAcks.Clear();
     _windowStart = 0;
     _sendStart   = 0;
 }
 public override NetSendResult Enqueue(NetOutgoingMessage message)
 {
     QueuedSends.Enqueue(message);
     if (QueuedSends.Count <= GetAllowedSends())
     {
         return(NetSendResult.Sent);
     }
     return(NetSendResult.Queued);
 }
 public override void Reset()
 {
     _receivedAcks.Clear();
     for (int i = 0; i < StoredMessages.Length; i++)
     {
         StoredMessages[i].Reset();
     }
     QueuedSends.Clear();
     _windowStart = 0;
     _sendStart   = 0;
 }
        public override NetSocketResult SendQueuedMessages(TimeSpan now)
        {
            int num = GetAllowedSends();

            while (num > 0 && QueuedSends.TryDequeue(out NetOutgoingMessage? om))
            {
                var sendResult = ExecuteSend(om);
                if (!sendResult.Success)
                {
                    QueuedSends.EnqueueFirst(om);
                    return(sendResult);
                }
                num--;
            }

            NotifyIdleWaiters(now, num);

            return(new NetSocketResult(true, false));
        }