public void CopyDataTo(IConnection targetConnection) { lock (_activeStreamLocker) { AciveStream.CopyTo(targetConnection.AciveStream); } }
public void Write(byte[] buffer, int offset, int count) { lock (_activeStreamLocker) { if (AciveStream != null) { AciveStream.Write(buffer, offset, count); AciveStream.Flush(); } } }
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); }
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; } }