using System.Threading; using ZeroLevel.Services.Serialization; namespace ZeroLevel.Network.FileTransfer { public sealed class FileStartFrame : IBinarySerializable, IFileTransferInfo { private static long _uploadTaskIdCounter = 0; public FileTransferInfoType TransferInfoType => FileTransferInfoType.Start; public long UploadFileTaskId { get; set; } public string FilePath; public long Size; public void Serialize(IBinaryWriter writer) { writer.WriteLong(this.UploadFileTaskId); writer.WriteString(this.FilePath); writer.WriteLong(this.Size); } public void Deserialize(IBinaryReader reader) { this.UploadFileTaskId = reader.ReadLong(); this.FilePath = reader.ReadString(); this.Size = reader.ReadLong(); } public static FileStartFrame GetTransferFileInfo(string path) { var fi = new System.IO.FileInfo(path); return new FileStartFrame { FilePath = fi.FullName, UploadFileTaskId = Interlocked.Increment(ref _uploadTaskIdCounter), Size = fi.Length }; } } }