Initial Commit
This commit is contained in:
@@ -0,0 +1,144 @@
|
||||
#if OVR_PLATFORM_ASYNC_MESSAGES
|
||||
using System.Threading.Tasks;
|
||||
#endif
|
||||
using UnityEngine;
|
||||
|
||||
namespace Oculus.Platform
|
||||
{
|
||||
public sealed class Request<T> : Request
|
||||
{
|
||||
#if OVR_PLATFORM_ASYNC_MESSAGES
|
||||
private TaskCompletionSource<Message<T>> tcs_ = null;
|
||||
#endif
|
||||
private Message<T>.Callback callback_ = null;
|
||||
|
||||
public Request(ulong requestID) : base(requestID)
|
||||
{
|
||||
}
|
||||
|
||||
public Request<T> OnComplete(Message<T>.Callback callback)
|
||||
{
|
||||
if (callback_ != null)
|
||||
{
|
||||
throw new UnityException("Attempted to attach multiple handlers to a Request. This is not allowed.");
|
||||
}
|
||||
|
||||
#if OVR_PLATFORM_ASYNC_MESSAGES
|
||||
if (tcs_ != null)
|
||||
{
|
||||
throw new UnityException("Attempted to attach multiple handlers to a Request. This is not allowed.");
|
||||
}
|
||||
#endif
|
||||
|
||||
callback_ = callback;
|
||||
Callback.AddRequest(this);
|
||||
return this;
|
||||
}
|
||||
|
||||
#if OVR_PLATFORM_ASYNC_MESSAGES
|
||||
new public async Task<Message<T>> Gen()
|
||||
{
|
||||
if (callback_ != null || tcs_ != null)
|
||||
{
|
||||
throw new UnityException("Attempted to attach multiple handlers to a Request. This is not allowed.");
|
||||
}
|
||||
|
||||
tcs_ = new TaskCompletionSource<Message<T>>();
|
||||
Callback.AddRequest(this);
|
||||
return await tcs_.Task;
|
||||
}
|
||||
#endif
|
||||
|
||||
override public void HandleMessage(Message msg)
|
||||
{
|
||||
if (!(msg is Message<T>))
|
||||
{
|
||||
Debug.LogError("Unable to handle message: " + msg.GetType());
|
||||
return;
|
||||
}
|
||||
|
||||
#if OVR_PLATFORM_ASYNC_MESSAGES
|
||||
if (tcs_ != null)
|
||||
{
|
||||
tcs_.SetResult( (Message<T>)msg);
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
|
||||
if (callback_ != null)
|
||||
{
|
||||
callback_((Message<T>)msg);
|
||||
return;
|
||||
}
|
||||
|
||||
throw new UnityException("Request with no handler. This should never happen.");
|
||||
}
|
||||
}
|
||||
|
||||
public class Request
|
||||
{
|
||||
#if OVR_PLATFORM_ASYNC_MESSAGES
|
||||
private TaskCompletionSource<Message> tcs_;
|
||||
#endif
|
||||
private Message.Callback callback_;
|
||||
|
||||
public Request(ulong requestID)
|
||||
{
|
||||
this.RequestID = requestID;
|
||||
}
|
||||
|
||||
public ulong RequestID { get; set; }
|
||||
|
||||
public Request OnComplete(Message.Callback callback)
|
||||
{
|
||||
callback_ = callback;
|
||||
Callback.AddRequest(this);
|
||||
return this;
|
||||
}
|
||||
|
||||
#if OVR_PLATFORM_ASYNC_MESSAGES
|
||||
public async Task<Message> Gen() {
|
||||
tcs_ = new TaskCompletionSource<Message>();
|
||||
Callback.AddRequest(this);
|
||||
return await tcs_.Task;
|
||||
}
|
||||
#endif
|
||||
|
||||
virtual public void HandleMessage(Message msg)
|
||||
{
|
||||
#if OVR_PLATFORM_ASYNC_MESSAGES
|
||||
if (tcs_ != null)
|
||||
{
|
||||
tcs_.SetResult(msg);
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
|
||||
if (callback_ != null)
|
||||
{
|
||||
callback_(msg);
|
||||
return;
|
||||
}
|
||||
|
||||
throw new UnityException("Request with no handler. This should never happen.");
|
||||
}
|
||||
|
||||
/**
|
||||
* This will run callbacks on all messages that returned from the server.
|
||||
* If too many message are coming back at once, then a limit can be passed in
|
||||
* as an arg to limit the number of messages to run callbacks on at a time
|
||||
*/
|
||||
public static void RunCallbacks(uint limit = 0)
|
||||
{
|
||||
// default of 0 will run callbacks on all messages on the queue
|
||||
if (limit == 0)
|
||||
{
|
||||
Callback.RunCallbacks();
|
||||
}
|
||||
else
|
||||
{
|
||||
Callback.RunLimitedCallbacks(limit);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user