//from user thread, our thread, or recv?
private void SendPacket(NetPacket packet)
{
switch (packet.Property)
{
case PacketProperty.Reliable:
DebugWrite("[RS]Packet reliable");
_reliableUnorderedChannel.AddToQueue(packet);
break;
case PacketProperty.Sequenced:
DebugWrite("[RS]Packet sequenced");
_sequencedChannel.AddToQueue(packet);
break;
case PacketProperty.ReliableOrdered:
DebugWrite("[RS]Packet reliable ordered");
_reliableOrderedChannel.AddToQueue(packet);
break;
case PacketProperty.None:
DebugWrite("[RS]Packet simple");
if (_peerListener.GetMaxFlowMode() == -1)
{
SendRawData(packet.RawData);
Recycle(packet);
}
else
{
_simpleChannel.AddToQueue(packet);
}
break;
case PacketProperty.MtuCheck:
if (!SendRawData(packet.RawData))
{
_finishMtu = true;
}
Recycle(packet);
break;
case PacketProperty.AckReliable:
case PacketProperty.AckReliableOrdered:
case PacketProperty.Ping:
case PacketProperty.Pong:
case PacketProperty.Disconnect:
case PacketProperty.MtuOk:
SendRawData(packet.RawData);
Recycle(packet);
break;
default:
throw new Exception("Unknown packet property: " + packet.Property);
}
}