private string Serialize <T>(MethodInfo method, params T[] arguments) where T : class
        {
            var methodRef = new MethodReference(method);
            var obj       = new IPCMessage(methodRef, arguments);

            return(JsonConvert.SerializeObject(obj));
        }
        public async Task Main()
        {
            await Connect();

            while (ServerStream.IsConnected)
            {
                try
                {
                    var json = await ServerStreamReader.ReadLineAsync();

                    IPCMessage data   = JsonConvert.DeserializeObject <IPCMessage>(json);
                    var        method = data.TargetMethod.GetMethod();
                    if (method.DeclaringType == typeof(MainClass))
                    {
                        method.Invoke(MainClass, data.Arguments);
                    }
                }
                catch (ArgumentNullException)
                {
                    ServerStream.Disconnect();
                    await Connect();
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex);
                }
            }
        }