Exemplo n.º 1
0
        public static void Request(long timeoutInMs, string eventType, PromiseHandler promiseHandler, params object[] args)
        {
            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);

            var req       = CreateRequestMsg(kRequest, eventType, -1, args);
            var requestId = m_Client.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();
                s_Requests.Add(eventType, request);
                request.data = Json.Serialize(args);
                var msg = Json.Serialize(req);
                m_Client.Send(msg);
            }
        }
Exemplo n.º 2
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"];
            }
        }