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); } }
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); } } }
/// <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); } } }
public Task CallActionAsync(InvokeParam invokeParam) { return(InvokeActionAsync(invokeParam.MethodName, invokeParam.GetParameters())); }
/// <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); }