コード例 #1
0
        public async Task <TResult> InvokeFunctionAsync <TResult>(string name, params object[] parameters)
        {
            name.CheckArgument(nameof(name));

            var invokeParam = new InvokeParam()
            {
                MethodName = name,
            };

            invokeParam.SetParameters(parameters);

            using var client = GetClient(BaseUri);
            var jsonData    = JsonSerializer.Serialize(invokeParam);
            var contentData = new StringContent(jsonData, Encoding.UTF8, MediaType);
            var response    = await client.PostAsync($"{ExtUri}/CallFunction", contentData).ConfigureAwait(false);

            if (response.IsSuccessStatusCode)
            {
                var resultData = await response.Content.ReadAsStreamAsync().ConfigureAwait(false);

                var invokeResult = await JsonSerializer.DeserializeAsync <Transfer.InvokeTypes.InvokeReturnValue>(resultData, DeserializerOptions).ConfigureAwait(false);

                return(JsonSerializer.Deserialize <TResult>(invokeResult.JsonData));
            }
            else
            {
                string errorMessage = $"{response.ReasonPhrase}: {await response.Content.ReadAsStringAsync().ConfigureAwait(false)}";

                System.Diagnostics.Debug.WriteLine("{0} ({1})", (int)response.StatusCode, errorMessage);
                throw new AdapterException((int)response.StatusCode, errorMessage);
            }
        }
コード例 #2
0
        public async Task InvokeActionAsync(string name, params object[] parameters)
        {
            name.CheckArgument(nameof(name));

            var invokeParam = new InvokeParam()
            {
                MethodName = name,
            };

            invokeParam.SetParameters(parameters);

            using (var client = GetClient(BaseUri))
            {
                string              jsonData    = JsonSerializer.Serialize(invokeParam);
                StringContent       contentData = new StringContent(jsonData, Encoding.UTF8, MediaType);
                HttpResponseMessage response    = await client.PostAsync($"{ExtUri}/CallAction", contentData).ConfigureAwait(false);

                if (response.IsSuccessStatusCode == false)
                {
                    string errorMessage = $"{response.ReasonPhrase}: {await response.Content.ReadAsStringAsync().ConfigureAwait(false)}";

                    System.Diagnostics.Debug.WriteLine("{0} ({1})", (int)response.StatusCode, errorMessage);
                    throw new AdapterException((int)response.StatusCode, errorMessage);
                }
            }
        }
コード例 #3
0
        /// <summary>
        /// 发布事件
        /// </summary>
        /// <param name="eventType">事件名</param>
        /// <param name="sender">发送者</param>
        /// <param name="eventArgs">事件参数</param>
        /// <param name="isAsync">是否支持异步</param>
        public static void PublishEvent(string eventType, object sender, object[] eventArgs, bool isAsync = false)
        {
            if (!listenerMap.ContainsKey(eventType))
            {
                return;
            }
            List <ListenerInfo> listenInfos = listenerMap[eventType];

            foreach (ListenerInfo listenerInfo in listenInfos)
            {
                object[] objs = null;
                if (listenerInfo.methodInfo.GetParameters().Length != 0)
                {
                    List <object> objList = new List <object>();
                    objList.Add(sender);
                    objList.AddRange(eventArgs);
                    objs = objList.ToArray();
                }
                if (isAsync)
                {
                    InvokeParam invokeParam = new InvokeParam()
                    {
                        listener = listenerInfo, param = objs
                    };
                    ThreadPool.QueueUserWorkItem(Invoke, invokeParam);
                }
                else
                {
                    listenerInfo.methodInfo.Invoke(listenerInfo.listener, objs);
                }
            }
        }
コード例 #4
0
 public Task CallActionAsync(InvokeParam invokeParam)
 {
     return(InvokeActionAsync(invokeParam.MethodName, invokeParam.GetParameters()));
 }
コード例 #5
0
        /// <summary>
        /// 利用线程池执行方法
        /// </summary>
        /// <param name="arg"></param>
        private static void Invoke(object arg)
        {
            InvokeParam invokeParam = (InvokeParam)arg;

            invokeParam.listener.methodInfo.Invoke(invokeParam.listener.listener, invokeParam.param);
        }