示例#1
0
        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);
            }
        }
示例#2
0
        /// <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);
            }
        }