internal void FireRemoteProcedureCallEvent(RemoteProcedureCallEventArgs args)
 {
     if (RemoteProcedureCall != null)
     {
         RemoteProcedureCall(this, args);
     }
 }
        void OnRemotingMessageReceived(object sender, RemotingMessageReceivedEventArgs args)
        {
            RemoteProcedureCallEventArgs rpc = new RemoteProcedureCallEventArgs(args.Destination, args.Operation, (dynamic)args.Message.Body);

            _extensionManager.FireRemoteProcedureCallEvent(rpc);
            args.Message.Body = rpc.Parameters;
        }
 void OnRemotingMessageReceived(object sender, RemotingMessageReceivedEventArgs args)
 {
     try
     {
         RemoteProcedureCallEventArgs rpc = new RemoteProcedureCallEventArgs(args.Destination, args.Operation, (dynamic)args.Message.Body);
         _extensionManager.FireRemoteProcedureCallEvent(rpc);
         args.Message.Body = rpc.Parameters;
     }
     catch (Exception ex)
     {
         _extensionManager.ConsoleWriteLine($"[{(ex.TargetSite.DeclaringType as IExtension)?.Name ?? ex.TargetSite.DeclaringType.FullName}] threw {ex.GetType().FullName} during RPC");
         _extensionManager.ConsoleWriteLine(" --- Stacktrace --- ");
         _extensionManager.ConsoleWriteLine(ex.StackTrace);
         _extensionManager.ConsoleWriteLine(" --- Stacktrace end --- ");
     }
 }