示例#1
0
 public void CopyDataTo(IConnection targetConnection)
 {
     lock (_activeStreamLocker)
     {
         AciveStream.CopyTo(targetConnection.AciveStream);
     }
 }
示例#2
0
 public void Write(byte[] buffer, int offset, int count)
 {
     lock (_activeStreamLocker)
     {
         if (AciveStream != null)
         {
             AciveStream.Write(buffer, offset, count);
             AciveStream.Flush();
         }
     }
 }
示例#3
0
        public IFtpMessage GetMessage()
        {
            if (_messageQueue.Count > 0)
            {
                return(_messageQueue.Dequeue());
            }

            if (!IsConnected)
            {
                return(null);
            }

            byte[] buffer = new byte[CommandBufferSize];
            try
            {
                using (MemoryStream ms = new MemoryStream())
                {
                    lock (_activeStreamLocker)
                    {
                        int count;
                        while ((count = AciveStream.Read(buffer, 0, buffer.Length)) > 0)
                        {
                            ms.Write(buffer, 0, count);
                            if ((char)buffer[count - 1] == '\n' &&
                                (char)buffer[count - 2] == '\r')
                            {
                                if (ConnectionType == ConnectionType.Client || FtpMessage.IsFullServerCommand(ms.ToArray(), Encoding))
                                {
                                    foreach (FtpMessage ftpMessage in FtpMessage.GetMessages(ms.ToArray(), Encoding, ConnectionType))
                                    {
                                        _messageQueue.Enqueue(ftpMessage);
                                    }
                                    break;
                                }
                            }
                        }
                    }
                    if (_messageQueue.Count > 0)
                    {
                        return(_messageQueue.Dequeue());
                    }
                }
            }
            catch (Exception ex)
            {
                Logger.Log.Error(ex.Message, ex);
            }
            return(null);
        }
示例#4
0
 public void SendMessage(IFtpMessage command)
 {
     try
     {
         int    position = 0;
         byte[] bytes    = command.Bytes;
         while (position < bytes.Length)
         {
             int length = Math.Min(bytes.Length - position, CommandBufferSize);
             AciveStream.Write(bytes, position, length);
             position += length;
         }
     }
     catch (Exception ex)
     {
         Logger.Log.Error(ex.Message, ex);
         throw;
     }
 }