[#58] Observable client cut
Signed-off-by: Pavel Gross <p.gross@yadro.com>
This commit is contained in:
parent
5f451c8818
commit
c88eea1f82
7 changed files with 328 additions and 56 deletions
|
@ -0,0 +1,8 @@
|
|||
using System;
|
||||
|
||||
namespace FrostFS.SDK.Client;
|
||||
|
||||
public class PartUploadedEventArgs(ObjectPartInfo part) : EventArgs
|
||||
{
|
||||
public ObjectPartInfo Part { get; } = part;
|
||||
}
|
38
src/FrostFS.SDK.Client/Models/Object/UploadInfo.cs
Normal file
38
src/FrostFS.SDK.Client/Models/Object/UploadInfo.cs
Normal file
|
@ -0,0 +1,38 @@
|
|||
using FrostFS.SDK;
|
||||
|
||||
namespace FrostFS.SDK.Client;
|
||||
|
||||
public readonly struct ObjectPartInfo(long offset, int length, FrostFsObjectId objectId) : System.IEquatable<ObjectPartInfo>
|
||||
{
|
||||
public long Offset { get; } = offset;
|
||||
public int Length { get; } = length;
|
||||
public FrostFsObjectId ObjectId { get; } = objectId;
|
||||
|
||||
public override bool Equals(object obj)
|
||||
{
|
||||
if (obj == null || obj is not ObjectPartInfo)
|
||||
return false;
|
||||
|
||||
return Equals((ObjectPartInfo)obj);
|
||||
}
|
||||
|
||||
public override int GetHashCode()
|
||||
{
|
||||
return ((int)(Offset >> 32)) ^ (int)Offset ^ Length ^ ObjectId.Value.GetHashCode();
|
||||
}
|
||||
|
||||
public static bool operator ==(ObjectPartInfo left, ObjectPartInfo right)
|
||||
{
|
||||
return left.Equals(right);
|
||||
}
|
||||
|
||||
public static bool operator !=(ObjectPartInfo left, ObjectPartInfo right)
|
||||
{
|
||||
return !(left == right);
|
||||
}
|
||||
|
||||
public bool Equals(ObjectPartInfo other)
|
||||
{
|
||||
return GetHashCode() == other.GetHashCode();
|
||||
}
|
||||
}
|
48
src/FrostFS.SDK.Client/Models/Object/UploadProgressInfo.cs
Normal file
48
src/FrostFS.SDK.Client/Models/Object/UploadProgressInfo.cs
Normal file
|
@ -0,0 +1,48 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.ObjectModel;
|
||||
using System.Linq;
|
||||
|
||||
namespace FrostFS.SDK.Client;
|
||||
|
||||
public class UploadProgressInfo
|
||||
{
|
||||
private List<ObjectPartInfo> _parts;
|
||||
|
||||
public UploadProgressInfo(Guid splitId, int capacity = 8)
|
||||
{
|
||||
_parts = new List<ObjectPartInfo>(capacity);
|
||||
SplitId = new SplitId(splitId);
|
||||
}
|
||||
|
||||
public UploadProgressInfo(Guid splitId, Collection<ObjectPartInfo> parts)
|
||||
{
|
||||
_parts = [.. parts];
|
||||
SplitId = new SplitId(splitId);
|
||||
}
|
||||
|
||||
public event EventHandler<PartUploadedEventArgs>? Notify;
|
||||
|
||||
public SplitId SplitId { get; }
|
||||
|
||||
internal void AddPart(ObjectPartInfo part)
|
||||
{
|
||||
_parts.Add(part);
|
||||
Notify?.Invoke(this, new PartUploadedEventArgs(part));
|
||||
}
|
||||
|
||||
public ObjectPartInfo GetPart(int index)
|
||||
{
|
||||
return _parts[index];
|
||||
}
|
||||
|
||||
public ObjectPartInfo GetLast()
|
||||
{
|
||||
return _parts.LastOrDefault();
|
||||
}
|
||||
|
||||
public ReadOnlyCollection<ObjectPartInfo> GetParts()
|
||||
{
|
||||
return new ReadOnlyCollection<ObjectPartInfo>(_parts);
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue