Lidgren.Network.NetConnection.CreateSenderChannel C# (CSharp) Method

CreateSenderChannel() private method

private CreateSenderChannel ( NetMessageType tp ) : Lidgren.Network.NetSenderChannelBase
tp NetMessageType
return Lidgren.Network.NetSenderChannelBase
        private NetSenderChannelBase CreateSenderChannel(NetMessageType tp)
        {
            NetSenderChannelBase chan;
            lock (m_sendChannels)
            {
                NetDeliveryMethod method = NetUtility.GetDeliveryMethod(tp);
                int sequenceChannel = (int)tp - (int)method;

                int channelSlot = (int)method - 1 + sequenceChannel;
                if (m_sendChannels[channelSlot] != null)
                {
                    // we were pre-empted by another call to this method
                    chan = m_sendChannels[channelSlot];
                }
                else
                {

                    switch (method)
                    {
                        case NetDeliveryMethod.Unreliable:
                        case NetDeliveryMethod.UnreliableSequenced:
                            chan = new NetUnreliableSenderChannel(this, NetUtility.GetWindowSize(method));
                            break;
                        case NetDeliveryMethod.ReliableOrdered:
                            chan = new NetReliableSenderChannel(this, NetUtility.GetWindowSize(method));
                            break;
                        case NetDeliveryMethod.ReliableSequenced:
                        case NetDeliveryMethod.ReliableUnordered:
                        default:
                            chan = new NetReliableSenderChannel(this, NetUtility.GetWindowSize(method));
                            break;
                    }
                    m_sendChannels[channelSlot] = chan;
                }
            }

            return chan;
        }