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:
parent
52b0d4d8ff
commit
a0c8dbee72
493 changed files with 57790 additions and 3 deletions
45
Assets/Scripts/MagicOnion/AsyncLock.cs
Normal file
45
Assets/Scripts/MagicOnion/AsyncLock.cs
Normal 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();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Reference in a new issue