/*
* Copyright (c) 2021 Samsung Electronics Co., Ltd All Rights Reserved
*
* Licensed under the Apache License, Version 2.0 (the License);
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an AS IS BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
using System;
namespace Tizen.Applications
{
///
/// A class to represent result of payload.
///
/// 9
public class PayloadAsyncResult : IDisposable
{
private PayloadAsyncResult(PayloadAsyncResultCode result, PeerInfo peer, string payloadId)
{
Result = result;
PeerInfo = peer;
PayloadId = payloadId;
}
internal static PayloadAsyncResult CreateFromHandle(IntPtr handle)
{
Interop.Cion.ErrorCode ret = Interop.CionPayloadAsyncResult.CionPayloadAsyncResultGetResult(handle, out int code);
if (ret != Interop.Cion.ErrorCode.None)
{
throw CionErrorFactory.GetException(ret, "Fail to get result code from the AsyncResult");
}
ret = Interop.CionPayloadAsyncResult.CionPayloadAsyncResultGetPayloadID(handle, out string payloadId);
if (ret != Interop.Cion.ErrorCode.None)
{
throw CionErrorFactory.GetException(ret, "Fail to get payload id from the AsyncResult");
}
ret = Interop.CionPayloadAsyncResult.CionPayloadAsyncResultGetPeerInfo(handle, out IntPtr peer);
if (ret != Interop.Cion.ErrorCode.None)
{
throw CionErrorFactory.GetException(ret, "Fail to get peerinfo from the AsyncResult");
}
ret = Interop.CionPeerInfo.CionPeerInfoClone(peer, out PeerInfoSafeHandle clone);
if (ret != Interop.Cion.ErrorCode.None)
{
throw CionErrorFactory.GetException(ret, "Failed to clone peer info.");
}
return new PayloadAsyncResult((PayloadAsyncResultCode)code, new PeerInfo(clone), payloadId);
}
///
/// Gets the result of payload.
///
/// 9
public PayloadAsyncResultCode Result { get; }
///
/// Gets the peer info of payload.
///
/// 9
public PeerInfo PeerInfo { get; }
///
/// Gets the payload id.
///
/// 9
public string PayloadId { get; }
#region IDisposable Support
private bool disposedValue = false;
///
/// Releases any unmanaged resources used by this object. Can also dispose any other disposable objects.
///
/// If true, disposes any disposable objects. If false, does not dispose disposable objects.
/// 9
protected virtual void Dispose(bool disposing)
{
if (!disposedValue)
{
if (disposing)
{
PeerInfo?.Dispose();
}
disposedValue = true;
}
}
///
/// Releases all resources used by the PayloadAsyncResult class.
///
/// 9
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
#endregion
}
}