run method

Future<void> run()
inherited

Runs the plugin, connecting to the IDE via stdio.

This is typically called from the plugin's main function:

void main() => MyPlugin().run();

Implementation

Future<void> run() async {
  final session = RpcSession.fromStdio(stdin, stdout);
  final context = RpcLumideContext(session);
  Future<void>? deactivation;

  Future<void> deactivateOnce() {
    return deactivation ??= Future<void>.sync(onDeactivate);
  }

  session.registerMethod(HostMethods.initialize, (params) async {
    log('Plugin initialized');
    await onActivate(context);
    return null;
  });

  session.registerMethod(HostMethods.shutdown, (params) async {
    log('Plugin shutting down');
    await deactivateOnce();
    return null;
  });

  session.registerMethod(HostMethods.getProcessInfo, (params) async {
    return {
      'rss': ProcessInfo.currentRss,
    };
  });

  try {
    await session.listen();
  } catch (e, st) {
    log('Plugin session error: $e\n$st');
  } finally {
    if (deactivation == null) {
      log('Plugin session ended, deactivating...');
      try {
        await deactivateOnce();
      } catch (e) {
        log('Error during plugin deactivation: $e');
      }
    }
    exit(0);
  }
}