Beispiel #1
0
        public override void SendAsync(NetPacket poolingPacket)
        {
            IPacketFilter filter = _channelOption.PacketFilter;

            while (filter != null)
            {
                poolingPacket = filter.Encode(poolingPacket);
                filter        = filter.NextFilter;
            }

            Interlocked.Increment(ref _statistic.TcpPacketSentCount);

            lock (_sendedList)
            {
                if (_sendedList.Count > 0)
                {
                    // 전송중임
                    _sendWaitQueue.Add(poolingPacket);
                    return;
                }

                _sendedBufferList.Push(new ArraySegment <byte>(poolingPacket.RawData, 0, poolingPacket.Size));
                _sendedList.Add(poolingPacket);
            }

            SendAsync(_sendedBufferList);
        }