[#1] Add object mappers
Signed-off-by: Ivan Pchelintsev <i.pchelintsev@yadro.com>
This commit is contained in:
parent
0d83541d82
commit
6b8f8cbd4c
7 changed files with 76 additions and 46 deletions
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue