public void Send(byte[] datas)
        {
            if (Sock != null && Sock.Connected)
            {
                var args = SocketHelpers.AcquireSocketArg();
                if (args != null)
                {
                    args.Completed += SendAsyncComplete;
                    args.UserToken  = this;
                    args.SetBuffer(datas, 0, datas
                                   .Length);
                    Sock.SendAsync(args);

                    //  Logger.WriteMsg(string.Format("[Send] {0}", message.ToString()), ConsoleColor.DarkGray);
                    unchecked
                    {
                        _bytesSent += (uint)datas.Length;
                    }

                    Interlocked.Add(ref _totalBytesSent, datas.Length);
                }
                else
                {
                }
            }
        }
Beispiel #2
0
        /// <summary>
        /// 비동기 전송을 시작한다.
        /// </summary>
        void StartSend()
        {
            if (IsConnected() == false)
            {
                return;
            }

            try
            {
                SetSendEventArgsBufferList(SendingList, SendEventArgs.BufferList);

                // 비동기 전송 시작.
                bool pending = Sock.SendAsync(SendEventArgs);
                if (!pending)
                {
                    ProcessSend(SendEventArgs);
                }
            }
            catch (Exception e)
            {
                SetReserveClosing(ServerOpt.ReserveClosingWaitMilliSecond);

                Console.WriteLine("send error!! close socket. " + e.Message);
                throw new Exception(e.Message, e);
            }
        }
Beispiel #3
0
        public bool Send(byte[] data)
        {
            BufferQueue.Enqueue(data);

            if (!SendIng)
            {
                if (InitData())
                {
                    SendIng = true;
                    Sock.SendAsync(_send);
                    return(true);
                }
            }

            return(false);
        }
Beispiel #4
0
        private void BeginSend(SocketAsyncEventArgs e)
        {
            if (e.SocketError != SocketError.Success)
            {
                Free();
                return;
            }


            int offset = e.Offset + e.BytesTransferred;

            if (offset < e.Buffer.Length)
            {
                if (BufferLenght > 0)
                {
                    int length = BufferLenght;

                    if (offset + length > e.Buffer.Length)
                    {
                        length = e.Buffer.Length - offset;
                    }

                    e.SetBuffer(offset, length);
                    Sock.SendAsync(_send);
                }
                else
                {
                    e.SetBuffer(offset, e.Count - e.Offset - e.BytesTransferred);
                    Sock.SendAsync(_send);
                }
            }
            else
            {
                if (InitData())
                {
                    Sock.SendAsync(_send);
                }
                else
                {
                    SendIng = false;
                }
            }
        }