Ejemplo n.º 1
0
        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);
            }
        }
Ejemplo n.º 2
0
 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);
     }
 }
Ejemplo n.º 3
0
        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"];
            }
        }
Ejemplo n.º 4
0
        // 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));
        }
Ejemplo n.º 5
0
 public static void Request(string eventType, PromiseHandler promiseHandler, params object[] args)
 {
     Request(eventType, promiseHandler, args, kRequestTimeout);
 }