[#1] Add object mappers

Signed-off-by: Ivan Pchelintsev <i.pchelintsev@yadro.com>
This commit is contained in:
Ivan Pchelintsev 2024-05-16 12:26:32 +03:00
parent 0d83541d82
commit 6b8f8cbd4c
7 changed files with 76 additions and 46 deletions

View file

@ -29,15 +29,16 @@ public partial class Client
return await _objectServiceClient.HeadAsync(request);
}
public async Task<PutResponse> PutObjectAsync(ContainerID cid, Stream data)
// public async Task<GetResponse> GetObjectAsync(ContainerID cid, ObjectID oid)
// {
//
// }
public async Task<PutResponse> PutObjectAsync(Header header, Stream payload)
{
var sessionToken = await CreateSessionAsync(uint.MaxValue);
var header = new Header
{
ContainerId = cid,
OwnerId = _owner.ToGrpcMessage(),
Version = Version.ToGrpcMessage()
};
header.OwnerId = _owner.ToGrpcMessage();
header.Version = Version.ToGrpcMessage();
var oid = new ObjectID
{
Value = header.Sha256()
@ -48,17 +49,23 @@ public partial class Client
{
Init = new PutRequest.Types.Body.Types.Init
{
Header = header,
Header = header
},
}
};
request.AddMetaHeader();
request.AddObjectSessionToken(sessionToken, cid, oid, ObjectSessionContext.Types.Verb.Put, _key);
request.AddObjectSessionToken(
sessionToken,
header.ContainerId,
oid,
ObjectSessionContext.Types.Verb.Put,
_key
);
request.Sign(_key);
using var stream = await InitObject(request);
var buffer = new byte[Constants.ObjectChunkSize];
var bufferLength = data.Read(buffer, 0, Constants.ObjectChunkSize);
var bufferLength = payload.Read(buffer, 0, Constants.ObjectChunkSize);
while (bufferLength > 0)
{
request.Body = new PutRequest.Types.Body
@ -68,22 +75,24 @@ public partial class Client
request.VerifyHeader = null;
request.Sign(_key);
await stream.Write(request);
bufferLength = data.Read(buffer, 0, Constants.ObjectChunkSize);
bufferLength = payload.Read(buffer, 0, Constants.ObjectChunkSize);
}
return await stream.Close();
}
private async Task<ObjectStreamer> InitObject(PutRequest initRequest)
{
if (initRequest is null)
{
throw new ArgumentNullException(nameof(initRequest));
}
var call = _objectServiceClient.Put();
await call.RequestStream.WriteAsync(initRequest);
return new ObjectStreamer { Call = call };
}
public async Task<DeleteResponse> DeleteObjectAsync(ContainerID cid, ObjectID oid)
{
var request = new DeleteRequest
@ -118,7 +127,7 @@ internal class ObjectStreamer : IDisposable
{
throw new ArgumentNullException(nameof(request));
}
await Call.RequestStream.WriteAsync(request);
}