public static void Request(string eventType, PromiseHandler promiseHandler, object[] args, int timeout) { RequestData request; if (s_Requests.TryGetValue(eventType, out request)) { request.promises.Add(promiseHandler); return; } request = new RequestData { eventType = eventType, promises = new List <PromiseHandler>(1), timeout = timeout }; request.promises.Add(promiseHandler); var req = CreateRequestMsg(kRequest, eventType, -1, args); var requestId = NewRequestId(); req["requestId"] = requestId; if (HasHandlers(eventType)) { var results = NotifyLocalListeners(eventType, args, false); var exception = results.FirstOrDefault(r => r is Exception); if (exception != null) { Reject(request, exception as Exception); } else { if (results.Length == 1) { Resolve(request, results); } else { Resolve(request, results); } } } else { request.id = requestId; request.offerStartTime = Stopwatch.GetTimestamp(); if (s_Requests.Count == 0) { EditorApplication.update += TickPendingOffers; } s_Requests.Add(eventType, request); request.data = Json.Serialize(args); var msg = Json.Serialize(req); Send(msg); } }
public static void Request(string eventType, PromiseHandler promiseHandler, object args = null, long timeoutInMs = kRequestDefaultTimeout, EventDataSerialization eventDataSerialization = EventDataSerialization.JsonUtility) { if (args == null) { Request(eventType, promiseHandler, null, timeoutInMs, eventDataSerialization); } else { Request(eventType, promiseHandler, new object[] { args }, timeoutInMs, eventDataSerialization); } }
public static void Request(string eventType, PromiseHandler promiseHandler, object[] args, long timeoutInMs = kRequestDefaultTimeout, EventDataSerialization eventDataSerialization = EventDataSerialization.JsonUtility) { RequestData request; if (s_Requests.TryGetValue(eventType, out request)) { request.promises.Add(promiseHandler); return; } request = new RequestData { eventType = eventType, promises = new List <PromiseHandler>(1), timeoutInMs = timeoutInMs }; request.promises.Add(promiseHandler); if (HasHandlers(eventType)) { var results = NotifyLocalListeners(eventType, args, false); var exception = results.FirstOrDefault(r => r is Exception); if (exception != null) { Reject(request, exception as Exception); } else { if (results.Length == 1) { Resolve(request, results); } else { Resolve(request, results); } } } else { request.offerStartTime = Stopwatch.GetTimestamp(); var requestId = m_Client.NewRequestId(); request.id = requestId; var msg = CreateRequest(kRequest, eventType, -1, requestId, args, eventDataSerialization); m_Client.Send(Json.Serialize(msg)); s_Requests.Add(eventType, request); request.data = Json.Serialize(msg["data"]); request.dataInfos = (object[])msg["dataInfos"]; } }
// TODO: Protect against multiple instantiation calls. public static async Task <WebMidiManager> InitializeAsync(IJSRuntime runtime) { var handler = new PromiseHandler(); await runtime.InvokeAsync <object>("midi.initialize", Timeout, handler.Proxy); await handler.Task; var inputs = (await runtime.InvokeAsync <List <WebMidiPort> >("midi.getInputPorts", Timeout)) .Select(input => input.ToMidiInputDevice()) .ToDictionary(input => input, input => new WebMidiInputProxy(input.SystemDeviceId)); var outputs = (await runtime.InvokeAsync <List <WebMidiPort> >("midi.getOutputPorts", Timeout)) .Select(output => output.ToMidiOutputDevice()) .ToDictionary(input => input, input => new WebMidiOutput(runtime, input.SystemDeviceId)); foreach (var proxy in inputs.Values) { await proxy.Listen(runtime); } return(new WebMidiManager(inputs, outputs)); }
public static void Request(string eventType, PromiseHandler promiseHandler, params object[] args) { Request(eventType, promiseHandler, args, kRequestTimeout); }