using System; using System.IO; namespace ZeroLevel.Services.Network.FileTransfer.Writers { internal sealed class DiskFileWriter : IDataWriter { private readonly FileStream _stream; private DateTime _writeTime = DateTime.UtcNow; private readonly long _size; private long _receive_size = 0; public DiskFileWriter(string path, long size) { _size = size; _stream = new FileStream(path, FileMode.Create, FileAccess.Write, FileShare.None); _stream.SetLength(_size); } public void CompleteReceiving() { if (_receive_size != _size) { Log.Error("Incomplete file data"); } } public void Write(long offset, byte[] data) { _receive_size += data.Length; _stream.Position = offset; _stream.Write(data, 0, data.Length); _writeTime = DateTime.Now; } public bool IsTimeoutBy(TimeSpan period) { return (DateTime.Now - _writeTime) > period; } public void Dispose() { _stream.Flush(); _stream.Close(); _stream.Dispose(); } } }