reflector.js 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. import { Logger } from "./logger.js";
  2. import { SceneSerializer } from "./sceneSerializer.js";
  3. /**
  4. * Class used to connect with the reflector zone of the sandbox via the reflector bridge
  5. * @since 5.0.0
  6. */
  7. export class Reflector {
  8. /**
  9. * Constructs a reflector object.
  10. * @param scene The scene to use
  11. * @param hostname The hostname of the reflector bridge
  12. * @param port The port of the reflector bridge
  13. */
  14. constructor(scene, hostname, port) {
  15. this._scene = scene;
  16. Logger.Log(`[Reflector] Connecting to ws://${hostname}:${port}`);
  17. this._webSocket = new WebSocket(`ws://${hostname}:${port}`);
  18. this._webSocket.onmessage = (event) => {
  19. const message = event.data;
  20. if (message.startsWith(Reflector._SERVER_PREFIX)) {
  21. const serverMessage = message.substr(Reflector._SERVER_PREFIX.length);
  22. Logger.Log(`[Reflector] Received server message: ${serverMessage.substr(0, 64)}`);
  23. this._handleServerMessage(serverMessage);
  24. return;
  25. }
  26. else {
  27. Logger.Log(`[Reflector] Received client message: ${message.substr(0, 64)}`);
  28. this._handleClientMessage();
  29. }
  30. };
  31. this._webSocket.onclose = (event) => {
  32. Logger.Log(`[Reflector] Disconnected ${event.code} ${event.reason}`);
  33. };
  34. }
  35. /**
  36. * Closes the reflector connection
  37. */
  38. close() {
  39. this._webSocket.close();
  40. }
  41. _handleServerMessage(message) {
  42. switch (message) {
  43. case "connected": {
  44. SceneSerializer.SerializeAsync(this._scene).then((serialized) => {
  45. this._webSocket.send(`load|${JSON.stringify(serialized)}`);
  46. });
  47. break;
  48. }
  49. }
  50. }
  51. _handleClientMessage() {
  52. // do nothing
  53. }
  54. }
  55. Reflector._SERVER_PREFIX = "$$";
  56. //# sourceMappingURL=reflector.js.map