1
0
mirror of https://github.com/lidgren/lidgren-network-gen3.git synced 2026-05-06 02:11:06 +09:00

NetQueue TryDequeue signature change

This commit is contained in:
lidgren
2010-09-05 10:37:39 +00:00
parent 61436efa7b
commit 1cf64dc015
6 changed files with 54 additions and 30 deletions

View File

@@ -228,8 +228,8 @@ namespace Lidgren.Network
if (m_throttleDebt >= throttleThreshold) if (m_throttleDebt >= throttleThreshold)
break; break;
NetSending send = m_unsentMessages.TryDequeue(); NetSending send;
if (send == null) if (!m_unsentMessages.TryDequeue(out send))
continue; continue;
send.NumSends++; send.NumSends++;

View File

@@ -233,7 +233,7 @@ namespace Lidgren.Network
// send unconnected sends // send unconnected sends
NetSending uncSend; NetSending uncSend;
while ((uncSend = m_unsentUnconnectedMessage.TryDequeue()) != null) while (m_unsentUnconnectedMessage.TryDequeue(out uncSend))
{ {
// //
// TODO: use throttling here // TODO: use throttling here

View File

@@ -81,11 +81,11 @@ namespace Lidgren.Network
/// <param name="initialCapacity">initial capacity in bytes</param> /// <param name="initialCapacity">initial capacity in bytes</param>
public NetOutgoingMessage CreateMessage(int initialCapacity) public NetOutgoingMessage CreateMessage(int initialCapacity)
{ {
NetOutgoingMessage retval = m_outgoingMessagesPool.TryDequeue(); NetOutgoingMessage retval;
if (retval == null) if (m_outgoingMessagesPool.TryDequeue(out retval))
retval = new NetOutgoingMessage();
else
retval.Reset(); retval.Reset();
else
retval = new NetOutgoingMessage();
byte[] storage = GetStorage(initialCapacity); byte[] storage = GetStorage(initialCapacity);
retval.m_data = storage; retval.m_data = storage;
@@ -228,11 +228,11 @@ namespace Lidgren.Network
/// </summary> /// </summary>
internal NetIncomingMessage CreateIncomingMessage(NetIncomingMessageType tp, int requiredCapacity) internal NetIncomingMessage CreateIncomingMessage(NetIncomingMessageType tp, int requiredCapacity)
{ {
NetIncomingMessage retval = m_incomingMessagesPool.TryDequeue(); NetIncomingMessage retval;
if (retval == null) if (m_incomingMessagesPool.TryDequeue(out retval))
retval = new NetIncomingMessage();
else
retval.Reset(); retval.Reset();
else
retval = new NetIncomingMessage();
NetException.Assert(retval.m_status == NetIncomingMessageReleaseStatus.NotReleased); NetException.Assert(retval.m_status == NetIncomingMessageReleaseStatus.NotReleased);
@@ -256,11 +256,11 @@ namespace Lidgren.Network
internal NetIncomingMessage CreateIncomingMessage(NetIncomingMessageType tp, byte[] copyFrom, int offset, int copyLength) internal NetIncomingMessage CreateIncomingMessage(NetIncomingMessageType tp, byte[] copyFrom, int offset, int copyLength)
{ {
NetIncomingMessage retval = m_incomingMessagesPool.TryDequeue(); NetIncomingMessage retval;
if (retval == null) if (m_incomingMessagesPool.TryDequeue(out retval))
retval = new NetIncomingMessage();
else
retval.Reset(); retval.Reset();
else
retval = new NetIncomingMessage();
NetException.Assert(retval.m_status == NetIncomingMessageReleaseStatus.NotReleased); NetException.Assert(retval.m_status == NetIncomingMessageReleaseStatus.NotReleased);

View File

@@ -196,8 +196,8 @@ namespace Lidgren.Network
if (m_status == NetPeerStatus.NotRunning) if (m_status == NetPeerStatus.NotRunning)
return null; return null;
NetIncomingMessage retval = m_releasedIncomingMessages.TryDequeue(); NetIncomingMessage retval;
if (retval != null) if (m_releasedIncomingMessages.TryDequeue(out retval))
{ {
if (retval.MessageType == NetIncomingMessageType.StatusChanged) if (retval.MessageType == NetIncomingMessageType.StatusChanged)
{ {
@@ -212,7 +212,9 @@ namespace Lidgren.Network
{ {
if (m_messageReceivedEvent != null) if (m_messageReceivedEvent != null)
m_messageReceivedEvent.WaitOne(maxMillis); m_messageReceivedEvent.WaitOne(maxMillis);
return m_releasedIncomingMessages.TryDequeue(); NetIncomingMessage retval;
m_releasedIncomingMessages.TryDequeue(out retval);
return retval;
} }
/// <summary> /// <summary>

View File

@@ -133,23 +133,29 @@ namespace Lidgren.Network
/// <summary> /// <summary>
/// Gets an item from the head of the queue, or returns default(T) if empty /// Gets an item from the head of the queue, or returns default(T) if empty
/// </summary> /// </summary>
public T TryDequeue() public bool TryDequeue(out T item)
{ {
if (m_size == 0) if (m_size == 0)
return default(T); {
item = default(T);
return false;
}
lock (m_lock) lock (m_lock)
{ {
if (m_size == 0) if (m_size == 0)
return default(T); {
item = default(T);
return false;
}
T retval = m_items[m_head]; item = m_items[m_head];
m_items[m_head] = default(T); m_items[m_head] = default(T);
m_head = (m_head + 1) % m_items.Length; m_head = (m_head + 1) % m_items.Length;
m_size--; m_size--;
return retval; return true;
} }
} }

View File

@@ -14,6 +14,9 @@ namespace UnitTests
queue.Enqueue(2); queue.Enqueue(2);
queue.Enqueue(3); queue.Enqueue(3);
bool ok;
int a;
if (queue.Contains(4)) if (queue.Contains(4))
throw new Exception("NetQueue Contains failure"); throw new Exception("NetQueue Contains failure");
@@ -22,8 +25,11 @@ namespace UnitTests
if (queue.Count != 3) if (queue.Count != 3)
throw new Exception("NetQueue failed"); throw new Exception("NetQueue failed");
if (queue.TryDequeue() != 1)
ok = queue.TryDequeue(out a);
if (ok == false || a != 1)
throw new Exception("NetQueue failure"); throw new Exception("NetQueue failure");
if (queue.Count != 2) if (queue.Count != 2)
throw new Exception("NetQueue failed"); throw new Exception("NetQueue failed");
@@ -31,22 +37,32 @@ namespace UnitTests
if (queue.Count != 3) if (queue.Count != 3)
throw new Exception("NetQueue failed"); throw new Exception("NetQueue failed");
if (queue.TryDequeue() != 42) ok = queue.TryDequeue(out a);
if (ok == false || a != 42)
throw new Exception("NetQueue failed"); throw new Exception("NetQueue failed");
if (queue.TryDequeue() != 2)
ok = queue.TryDequeue(out a);
if (ok == false || a != 2)
throw new Exception("NetQueue failed"); throw new Exception("NetQueue failed");
if (queue.TryDequeue() != 3)
ok = queue.TryDequeue(out a);
if (ok == false || a != 3)
throw new Exception("NetQueue failed"); throw new Exception("NetQueue failed");
if (queue.TryDequeue() != 0)
ok = queue.TryDequeue(out a);
if (ok == true)
throw new Exception("NetQueue failed"); throw new Exception("NetQueue failed");
if (queue.TryDequeue() != 0)
ok = queue.TryDequeue(out a);
if (ok == true)
throw new Exception("NetQueue failed"); throw new Exception("NetQueue failed");
queue.Enqueue(78); queue.Enqueue(78);
if (queue.Count != 1) if (queue.Count != 1)
throw new Exception("NetQueue failed"); throw new Exception("NetQueue failed");
if (queue.TryDequeue() != 78) ok = queue.TryDequeue(out a);
if (ok == false || a != 78)
throw new Exception("NetQueue failed"); throw new Exception("NetQueue failed");
queue.Clear(); queue.Clear();