Ejemplo n.º 1
0
        /// <summary>
        /// 비동기 전송을 시작한다.
        /// </summary>
        void StartSend()
        {
            Console.WriteLine(this + " StartSend");
            lock (this.lockQueue)
            {
                // 전송이 아직 완료된 상태가 아니므로 데이터만 가져오고 큐에서 제거하진 않는다.
                CPacket _packet = this.sendingQueue.Peek();

                // 헤더에 패킷 사이즈를 기록한다.
                _packet.WriteSize();

                // 이번에 보낼 패킷 사이즈 만큼 버퍼 크기를 설정하고
                this.sendArgs.SetBuffer(this.sendArgs.Offset, _packet.position);
                // 패킷 내용을 SocketAsyncEventArgs버퍼에 복사한다.
                Array.Copy(_packet.buffer, 0, this.sendArgs.Buffer, this.sendArgs.Offset, _packet.position);
                Console.WriteLine(" > sendArgs.Offset:{0} ~> .position:{1} ", sendArgs.Offset, _packet.position);

                // 비동기 전송 시작.
                bool pending = this.socket.SendAsync(this.sendArgs);
                Console.WriteLine(" > 전송등록 pending:{0}", pending);
                if (!pending)
                {
                    Console.WriteLine("  > 전송등록후 바로 보내버렸다.");
                    SendProcess(this.sendArgs);
                }
            }
        }