Initial Client/Server Communication

#1
Followed the MagicOnion quickstart guide, borrowing code from the chat sample app to get something working
This commit is contained in:
hyperion51 2020-02-26 17:48:40 +00:00
commit a0c8dbee72
493 changed files with 57790 additions and 3 deletions

View file

@ -0,0 +1,45 @@
using System;
using System.Threading;
using System.Threading.Tasks;
namespace MagicOnion
{
public class AsyncLock
{
readonly SemaphoreSlim semaphore;
#if NON_UNITY
public static readonly ValueTask<LockReleaser> EmptyLock = new ValueTask<LockReleaser>(new LockReleaser(null));
#endif
public AsyncLock()
{
this.semaphore = new SemaphoreSlim(1, 1);
}
#if NON_UNITY
public async ValueTask<LockReleaser> LockAsync()
#else
public async Task<LockReleaser> LockAsync()
#endif
{
await semaphore.WaitAsync().ConfigureAwait(false);
return new LockReleaser(semaphore);
}
public struct LockReleaser : IDisposable
{
readonly SemaphoreSlim semaphore;
public LockReleaser(SemaphoreSlim semaphore)
{
this.semaphore = semaphore;
}
public void Dispose()
{
semaphore?.Release();
}
}
}
}