mirror of
https://git.ryujinx.app/ryubing/ryujinx.git
synced 2025-07-27 05:57:11 +02:00
74 lines
2.4 KiB
C#
74 lines
2.4 KiB
C#
using LibHac.Bcat;
|
|
using LibHac.Common;
|
|
using Ryujinx.Horizon.Common;
|
|
using Ryujinx.Horizon.Sdk.Bcat;
|
|
using Ryujinx.Horizon.Sdk.Sf;
|
|
using Ryujinx.Horizon.Sdk.Sf.Hipc;
|
|
using System;
|
|
using System.Threading;
|
|
|
|
namespace Ryujinx.Horizon.Bcat.Ipc
|
|
{
|
|
partial class DeliveryCacheStorageService : IDeliveryCacheStorageService, IDisposable
|
|
{
|
|
private SharedRef<LibHac.Bcat.Impl.Ipc.IDeliveryCacheStorageService> _libHacService;
|
|
private int _disposalState;
|
|
|
|
public DeliveryCacheStorageService(ref SharedRef<LibHac.Bcat.Impl.Ipc.IDeliveryCacheStorageService> libHacService)
|
|
{
|
|
_libHacService = SharedRef<LibHac.Bcat.Impl.Ipc.IDeliveryCacheStorageService>.CreateMove(ref libHacService);
|
|
}
|
|
|
|
[CmifCommand(0)]
|
|
public Result CreateFileService(out IDeliveryCacheFileService service)
|
|
{
|
|
using SharedRef<LibHac.Bcat.Impl.Ipc.IDeliveryCacheFileService> libHacService = new();
|
|
|
|
LibHac.Result resultCode = _libHacService.Get.CreateFileService(ref libHacService.Ref);
|
|
|
|
if (resultCode.IsSuccess())
|
|
{
|
|
service = new DeliveryCacheFileService(ref libHacService.Ref);
|
|
}
|
|
else
|
|
{
|
|
service = null;
|
|
}
|
|
|
|
return resultCode.Horizon;
|
|
}
|
|
|
|
[CmifCommand(1)]
|
|
public Result CreateDirectoryService(out IDeliveryCacheDirectoryService service)
|
|
{
|
|
using SharedRef<LibHac.Bcat.Impl.Ipc.IDeliveryCacheDirectoryService> libHacService = new();
|
|
|
|
LibHac.Result resultCode = _libHacService.Get.CreateDirectoryService(ref libHacService.Ref);
|
|
|
|
if (resultCode.IsSuccess())
|
|
{
|
|
service = new DeliveryCacheDirectoryService(ref libHacService.Ref);
|
|
}
|
|
else
|
|
{
|
|
service = null;
|
|
}
|
|
|
|
return resultCode.Horizon;
|
|
}
|
|
|
|
[CmifCommand(10)]
|
|
public Result EnumerateDeliveryCacheDirectory(out int count, [Buffer(HipcBufferFlags.Out | HipcBufferFlags.MapAlias)] Span<DirectoryName> directoryNames)
|
|
{
|
|
return _libHacService.Get.EnumerateDeliveryCacheDirectory(out count, directoryNames).Horizon;
|
|
}
|
|
|
|
public void Dispose()
|
|
{
|
|
if (Interlocked.Exchange(ref _disposalState, 1) == 0)
|
|
{
|
|
_libHacService.Destroy();
|
|
}
|
|
}
|
|
}
|
|
}
|