run method
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);
}
}