public object Invoke(Guid clsid, string function, Execute execute, ParameterInfoTO[] args) { if (_disposed) { throw new ObjectDisposedException(nameof(IpcClient)); } var info = new CallData { CLSID = clsid, MethodToCall = function, Parameters = args, ExecuteType = execute.ToString(), Execute = execute }; // Write request to server var serializer = new JsonSerializer(); var sw = new StreamWriter(_pipeWrapper.GetInternalStream()); serializer.Serialize(sw, JsonConvert.SerializeObject(info)); sw.Flush(); var sr = new StreamReader(_pipeWrapper.GetInternalStream()); var jsonTextReader = new JsonTextReader(sr); switch (info.Execute) { case Execute.GetType: { return(GetType(serializer, jsonTextReader)); } case Execute.GetMethods: { return(GetMethodInfo(serializer, jsonTextReader)); } case Execute.GetNamespaces: { return(GetNamespaces(serializer, jsonTextReader)); } case Execute.ExecuteSpecifiedMethod: { return(ExecuteSpecifiedMethod(serializer, jsonTextReader)); } default: return(null); } }
/// <summary> /// Executes a call to a library. /// </summary> /// <param name="clsid"></param> /// <param name="function">Name of the function to call.</param> /// <param name="execute"></param> /// <param name="args">Array of args to pass to the function.</param> /// <returns>Result object returned by the library.</returns> /// <exception cref="Exception">This Method will rethrow all exceptions thrown by the wrapper.</exception> public object Invoke(Guid clsid, string function, Execute execute, ParameterInfoTO[] args) { if (_disposed) { throw new ObjectDisposedException(nameof(IpcClient)); } var info = new CallData { CLSID = clsid, MethodToCall = function, Parameters = args, ExecuteType = execute.ToString(), Execute = execute }; // Write request to server var serializer = new JsonSerializer(); var sw = new StreamWriter(_pipeWrapper.GetInternalStream()); serializer.Serialize(sw, JsonConvert.SerializeObject(info)); sw.Flush(); var sr = new StreamReader(_pipeWrapper.GetInternalStream()); var jsonTextReader = new JsonTextReader(sr); object result; switch (info.Execute) { case Execute.GetType: { result = serializer.Deserialize(jsonTextReader, typeof(string)); var exception = result as Exception; if (exception != null) { throw exception; } var ipCreturn = result as string; var reader = new StringReader(ipCreturn ?? ""); return(serializer.Deserialize(reader, typeof(Type))); } case Execute.GetMethods: { result = serializer.Deserialize(jsonTextReader, typeof(string)); var exception = result as Exception; if (exception != null) { throw exception; } var value = result?.ToString(); return(value == null ? new List <MethodInfoTO>() : JsonConvert.DeserializeObject <List <MethodInfoTO> >(value)); } case Execute.GetNamespaces: { result = serializer.Deserialize(jsonTextReader, typeof(List <string>)); var exception = result as Exception; if (exception != null) { throw exception; } return(result); } case Execute.ExecuteSpecifiedMethod: { try { var obj = serializer.Deserialize(jsonTextReader); result = obj.ToString(); var exception = JsonConvert.DeserializeObject <Exception>(result.ToString()); if (exception != null) { throw exception; } } catch (Exception ex) { // Do nothing was not an exception var baseException = ex.GetBaseException(); return(new KeyValuePair <bool, string>(true, baseException.Message)); } return(result); } default: return(null); } }