plugin.ts 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. type plugin_t = {
  2. on_ui?: any; // JSValue *
  3. on_draw?: any; // JSValue *
  4. on_update?: any; // JSValue *
  5. on_delete?: any; // JSValue *
  6. version?: string;
  7. name?: string;
  8. };
  9. let plugin_map: map_t<string, plugin_t> = map_create();
  10. let _plugin_name: string;
  11. function plugin_create(): plugin_t {
  12. let p: plugin_t = {};
  13. p.name = _plugin_name;
  14. map_set(plugin_map, p.name, p);
  15. return p;
  16. }
  17. function plugin_start(plugin: string) {
  18. let blob: buffer_t = data_get_blob("plugins/" + plugin);
  19. _plugin_name = plugin;
  20. js_eval("(1, eval)(`" + sys_buffer_to_string(blob) + "`)");
  21. data_delete_blob("plugins/" + plugin);
  22. }
  23. function plugin_stop(plugin: string) {
  24. let p: plugin_t = map_get(plugin_map, plugin);
  25. if (p.on_delete != null) {
  26. js_call(p.on_delete);
  27. }
  28. map_delete(plugin_map, plugin);
  29. }
  30. function plugin_notify_on_ui(plugin: plugin_t, f: any): void {
  31. plugin.on_ui = f;
  32. }
  33. function plugin_notify_on_update(plugin: plugin_t, f: any): void {
  34. plugin.on_update = f;
  35. }
  36. function plugin_notify_on_delete(plugin: plugin_t, f: any): void {
  37. plugin.on_delete = f;
  38. }