Exemplo n.º 1
0
        public async Task <T> Request <T>(string target, int handle, params object[] payloads) where T : new()
        {
            var response = default(T);
            var task     = new ThreadLock();
            var wrapped  = new EventRequest(new EventCallback(metadata =>
            {
                Logger.Debug(
                    $"[{metadata.Inherit}] Got request response from client `{handle}` with metadata {JsonConvert.SerializeObject(metadata)}");

                try
                {
                    response = JsonConvert.DeserializeObject <T>(metadata.Find <string>("__response"));
                }
                catch (Exception)
                {
                    Logger.Info($"[{metadata.Inherit}] Event request response returned an invalid type.");
                }

                task.Unlock();

                return(response);
            }))
            {
                Target = target,
                Sender = -1
            };

            if (payloads != null && payloads.Length > 0)
            {
                WriteMetadata(wrapped, payloads);
            }

            Send(wrapped, handle);

            PendingRequests.Add(wrapped);

            await task.Wait();

            return(response);
        }