comm.ts 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. // Copyright (c) Jupyter Development Team.
  2. // Distributed under the terms of the Modified BSD License.
  3. import { KernelManager } from '@jupyterlab/services';
  4. import { PromiseDelegate } from '@lumino/coreutils';
  5. import { log } from './log';
  6. export async function main() {
  7. // Start a python kernel
  8. const kernelManager = new KernelManager();
  9. const kernel = await kernelManager.startNew({ name: 'python' });
  10. log('Register a comm target in the kernel');
  11. await kernel.requestExecute({
  12. code: `
  13. kernel = get_ipython().kernel
  14. comm = None
  15. def comm_opened(comm, msg):
  16. comm = comm
  17. kernel.comm_manager.register_target('test', comm_opened)
  18. `
  19. }).done;
  20. log('Create a comm');
  21. const comm = kernel.createComm('test');
  22. log('Open the comm');
  23. await comm.open('initial state').done;
  24. log('Send a test message');
  25. await comm.send('test').done;
  26. log('Close the comm');
  27. await comm.close('bye').done;
  28. log('Register a comm target in the browser');
  29. const done = new PromiseDelegate();
  30. kernel.registerCommTarget('test2', (comm, commMsg) => {
  31. if (commMsg.content.target_name !== 'test2') {
  32. return;
  33. }
  34. comm.onMsg = msg => {
  35. log(msg.content.data);
  36. };
  37. comm.onClose = msg => {
  38. log(msg.content.data);
  39. done.resolve(undefined);
  40. };
  41. });
  42. log('Create a corresponding comm from the kernel');
  43. const code = `
  44. from ipykernel.comm import Comm
  45. comm = Comm(target_name="test2")
  46. comm.send(data="comm sent message")
  47. comm.close(data="closing comm")
  48. `;
  49. await kernel.requestExecute({ code: code }).done;
  50. // Wait for the comm to be closed on our side
  51. await done.promise;
  52. }