fix: added a workflow to properly disconnect the mouse when the driver stops
This commit is contained in:
		@ -228,6 +228,7 @@ class _3DMouseThreeJSWindows implements _3DconnexionMiddleware {
 | 
			
		||||
  _camera: PerspectiveCamera | OrthographicCamera | null
 | 
			
		||||
  appName: string
 | 
			
		||||
  debug: boolean
 | 
			
		||||
  disconnectionCallback: () => void
 | 
			
		||||
  gl: {
 | 
			
		||||
    fov: number
 | 
			
		||||
    near: number
 | 
			
		||||
@ -251,15 +252,24 @@ class _3DMouseThreeJSWindows implements _3DconnexionMiddleware {
 | 
			
		||||
    console.log(`prefix ${message} data:${data}`)
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  constructor({ camera, canvasId, appName, debug = false, TRACE_MESSAGES = false }:{
 | 
			
		||||
    camera: PerspectiveCamera | OrthographicCamera,
 | 
			
		||||
    canvasId: string,
 | 
			
		||||
    appName: string,
 | 
			
		||||
    debug: boolean,
 | 
			
		||||
  constructor({
 | 
			
		||||
    camera,
 | 
			
		||||
    canvasId,
 | 
			
		||||
    appName,
 | 
			
		||||
    debug = false,
 | 
			
		||||
    TRACE_MESSAGES = false,
 | 
			
		||||
    disconnectCallback,
 | 
			
		||||
  }: {
 | 
			
		||||
    camera: PerspectiveCamera | OrthographicCamera
 | 
			
		||||
    canvasId: string
 | 
			
		||||
    appName: string
 | 
			
		||||
    debug: boolean
 | 
			
		||||
    TRACE_MESSAGES: boolean
 | 
			
		||||
    disconnectCallback: () => void
 | 
			
		||||
  }) {
 | 
			
		||||
    this._camera = null
 | 
			
		||||
    const canvas : HTMLElement | null= document.getElementById(canvasId)
 | 
			
		||||
    this.disconnectionCallback = disconnectCallback
 | 
			
		||||
    const canvas: HTMLElement | null = document.getElementById(canvasId)
 | 
			
		||||
 | 
			
		||||
    if (canvas instanceof HTMLCanvasElement === false) {
 | 
			
		||||
      const message = 'the canvas found is not a HTMLCanvasElement'
 | 
			
		||||
@ -273,8 +283,14 @@ class _3DMouseThreeJSWindows implements _3DconnexionMiddleware {
 | 
			
		||||
      throw new Error(message)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (!(camera instanceof PerspectiveCamera === true || camera instanceof OrthographicCamera === true)) {
 | 
			
		||||
      const message = 'camera is not a perpsective camera or a orthographic camera'
 | 
			
		||||
    if (
 | 
			
		||||
      !(
 | 
			
		||||
        camera instanceof PerspectiveCamera === true ||
 | 
			
		||||
        camera instanceof OrthographicCamera === true
 | 
			
		||||
      )
 | 
			
		||||
    ) {
 | 
			
		||||
      const message =
 | 
			
		||||
        'camera is not a perpsective camera or a orthographic camera'
 | 
			
		||||
      this.log(message)
 | 
			
		||||
      throw new Error(message)
 | 
			
		||||
    }
 | 
			
		||||
@ -330,7 +346,11 @@ class _3DMouseThreeJSWindows implements _3DconnexionMiddleware {
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  set camera(newCamera) {
 | 
			
		||||
    this._camera = newCamera instanceof PerspectiveCamera || newCamera instanceof OrthographicCamera ? newCamera.clone() : newCamera
 | 
			
		||||
    this._camera =
 | 
			
		||||
      newCamera instanceof PerspectiveCamera ||
 | 
			
		||||
      newCamera instanceof OrthographicCamera
 | 
			
		||||
        ? newCamera.clone()
 | 
			
		||||
        : newCamera
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  render(now: number) {
 | 
			
		||||
@ -375,22 +395,22 @@ class _3DMouseThreeJSWindows implements _3DconnexionMiddleware {
 | 
			
		||||
  // navigation model
 | 
			
		||||
  // getCoordinateSystem is queried to determine the coordinate system of the application
 | 
			
		||||
  // described as X to the right, Y-up and Z out of the screen
 | 
			
		||||
  getCoordinateSystem() : SixteenNumbers {
 | 
			
		||||
    const a : SixteenNumbers = [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]
 | 
			
		||||
  getCoordinateSystem(): SixteenNumbers {
 | 
			
		||||
    const a: SixteenNumbers = [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]
 | 
			
		||||
    this.log('getCoordinateSystem', a)
 | 
			
		||||
    return a
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  getConstructionPlane() : PlaneEquation {
 | 
			
		||||
  getConstructionPlane(): PlaneEquation {
 | 
			
		||||
    throw new Error('getConstructionPlane')
 | 
			
		||||
    const a : PlaneEquation = [0, 0, 0, 0]
 | 
			
		||||
    const a: PlaneEquation = [0, 0, 0, 0]
 | 
			
		||||
    this.log('getConstructionPlane', a)
 | 
			
		||||
    return a
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  getFloorPlane() : PlaneEquation {
 | 
			
		||||
  getFloorPlane(): PlaneEquation {
 | 
			
		||||
    throw new Error('getFloorPlane')
 | 
			
		||||
    const a : PlaneEquation = [0, 0, 0, 0]
 | 
			
		||||
    const a: PlaneEquation = [0, 0, 0, 0]
 | 
			
		||||
    this.log('getFloorPlane', a)
 | 
			
		||||
    return a
 | 
			
		||||
  }
 | 
			
		||||
@ -411,8 +431,7 @@ class _3DMouseThreeJSWindows implements _3DconnexionMiddleware {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (this.camera instanceof PerspectiveCamera === false) {
 | 
			
		||||
      const message =
 | 
			
		||||
        'Camear is not perspective, unable to getFov, brick!'
 | 
			
		||||
      const message = 'Camear is not perspective, unable to getFov, brick!'
 | 
			
		||||
      this.log(message)
 | 
			
		||||
      throw new Error(message)
 | 
			
		||||
    }
 | 
			
		||||
@ -421,7 +440,6 @@ class _3DMouseThreeJSWindows implements _3DconnexionMiddleware {
 | 
			
		||||
      2 *
 | 
			
		||||
      Math.atan(
 | 
			
		||||
        Math.atan2(this.camera.fov * Math.PI, 360.0) *
 | 
			
		||||
 | 
			
		||||
          Math.sqrt(1 + this.camera.aspect * this.camera.aspect)
 | 
			
		||||
      )
 | 
			
		||||
    if (this.TRACE_MESSAGES) console.log('fov=' + (fov * 180.0) / Math.PI)
 | 
			
		||||
@ -431,11 +449,11 @@ class _3DMouseThreeJSWindows implements _3DconnexionMiddleware {
 | 
			
		||||
    return a
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  getFrontView() : SixteenNumbers {
 | 
			
		||||
  getFrontView(): SixteenNumbers {
 | 
			
		||||
    // Method called by the Navigation Library when a connection is established to determine the pose
 | 
			
		||||
    // of the front view. When the user presses the ‘Front’ button on a 3D Mouse this will be the pose
 | 
			
		||||
    // the Navigation Library switches to. All other view orientations are calculated from this.
 | 
			
		||||
    const a : SixteenNumbers = [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]
 | 
			
		||||
    const a: SixteenNumbers = [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]
 | 
			
		||||
    this.log('getFrontView', a)
 | 
			
		||||
    return a
 | 
			
		||||
  }
 | 
			
		||||
@ -450,7 +468,7 @@ class _3DMouseThreeJSWindows implements _3DconnexionMiddleware {
 | 
			
		||||
    return a
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  getModelExtents() : BoundingBox {
 | 
			
		||||
  getModelExtents(): BoundingBox {
 | 
			
		||||
    // Method called by the Navigation Library when it needs to know the bounding box of the model.
 | 
			
		||||
    //   One example of when this will happen is when the library needs to zoom the view to the extents
 | 
			
		||||
    // of the model. The extents are returned as an array containing the min and max values of the
 | 
			
		||||
@ -458,7 +476,14 @@ class _3DMouseThreeJSWindows implements _3DconnexionMiddleware {
 | 
			
		||||
    // Required for the pivot and zoom algorithms.
 | 
			
		||||
 | 
			
		||||
    const unit = 100
 | 
			
		||||
    const a : BoundingBox = [-unit / 2, -unit / 2, -unit / 2, unit / 2, unit / 2, unit / 2]
 | 
			
		||||
    const a: BoundingBox = [
 | 
			
		||||
      -unit / 2,
 | 
			
		||||
      -unit / 2,
 | 
			
		||||
      -unit / 2,
 | 
			
		||||
      unit / 2,
 | 
			
		||||
      unit / 2,
 | 
			
		||||
      unit / 2,
 | 
			
		||||
    ]
 | 
			
		||||
    this.log('getModelExtents', a)
 | 
			
		||||
    return a
 | 
			
		||||
  }
 | 
			
		||||
@ -470,19 +495,19 @@ class _3DMouseThreeJSWindows implements _3DconnexionMiddleware {
 | 
			
		||||
    return a
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  getPivotPositon() : Position {
 | 
			
		||||
  getPivotPositon(): Position {
 | 
			
		||||
    // Method called by the Navigation Library when it wants to know the position of the 2D mouse
 | 
			
		||||
    // pivot or of a pivot manually set by the user. The position is returned as a 1x3 array in world
 | 
			
		||||
    // coordinates.
 | 
			
		||||
    // Required for rotating about the pivot position
 | 
			
		||||
    if (this.TRACE_MESSAGES)
 | 
			
		||||
      console.log('pivot=[' + 0 + ', ' + 0 + ', ' + 0 + ']')
 | 
			
		||||
    const a : Position = [0, 0, 0]
 | 
			
		||||
    const a: Position = [0, 0, 0]
 | 
			
		||||
    this.log('getPivotPosition', a)
 | 
			
		||||
    return a
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  getPointerPosition() : Position {
 | 
			
		||||
  getPointerPosition(): Position {
 | 
			
		||||
    // Method called by the Navigation Library when it requires the world position of the mouse pointer
 | 
			
		||||
    // on the projection/near plane.
 | 
			
		||||
    // Required for the quick zoom algorithms.
 | 
			
		||||
@ -504,13 +529,14 @@ class _3DMouseThreeJSWindows implements _3DconnexionMiddleware {
 | 
			
		||||
    return a
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  getViewExtents() : ViewExtents{
 | 
			
		||||
  getViewExtents(): ViewExtents {
 | 
			
		||||
    // The method returns a 1x6 java array containing the min and max extents of the view bounding
 | 
			
		||||
    // box. The view extents defines the visible viewing volume of an orthographic projection in view
 | 
			
		||||
    // coordinates as min = [left, bottom, -far] and max = [right, top, far].
 | 
			
		||||
    // Required for orthographic projections.
 | 
			
		||||
    if (this.camera instanceof PerspectiveCamera) {
 | 
			
		||||
      const message = 'State is mismatched, camera says perspective but the navigation library says orthographc, in getViewExtents'
 | 
			
		||||
      const message =
 | 
			
		||||
        'State is mismatched, camera says perspective but the navigation library says orthographc, in getViewExtents'
 | 
			
		||||
      this.log(message)
 | 
			
		||||
      throw new Error(message)
 | 
			
		||||
    }
 | 
			
		||||
@ -521,7 +547,7 @@ class _3DMouseThreeJSWindows implements _3DconnexionMiddleware {
 | 
			
		||||
      throw new Error(message)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    const a : ViewExtents = [
 | 
			
		||||
    const a: ViewExtents = [
 | 
			
		||||
      this.camera.left,
 | 
			
		||||
      this.camera.bottom,
 | 
			
		||||
      this.camera.far * -1,
 | 
			
		||||
@ -533,7 +559,7 @@ class _3DMouseThreeJSWindows implements _3DconnexionMiddleware {
 | 
			
		||||
    return a
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  getViewFrustum() : ViewExtents {
 | 
			
		||||
  getViewFrustum(): ViewExtents {
 | 
			
		||||
    // The method returns a 1x 6 java array containing the frustum of the perspective view/camera in
 | 
			
		||||
    // camera coordinates. This may be called by the Navigation Library when it needs to calculate the
 | 
			
		||||
    // field-of-view of the camera, or during algorithms that need to know if the model is currently
 | 
			
		||||
@ -552,7 +578,8 @@ class _3DMouseThreeJSWindows implements _3DconnexionMiddleware {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (this.camera instanceof PerspectiveCamera === false) {
 | 
			
		||||
      const message = 'Camear is not perspective, unable to getViewFrustum, brick!'
 | 
			
		||||
      const message =
 | 
			
		||||
        'Camear is not perspective, unable to getViewFrustum, brick!'
 | 
			
		||||
      this.log(message)
 | 
			
		||||
      throw new Error(message)
 | 
			
		||||
    }
 | 
			
		||||
@ -576,12 +603,19 @@ class _3DMouseThreeJSWindows implements _3DconnexionMiddleware {
 | 
			
		||||
          this.camera.far +
 | 
			
		||||
          ']'
 | 
			
		||||
      )
 | 
			
		||||
    const a : ViewExtents = [left, -left, bottom, -bottom, this.camera.near, this.camera.far]
 | 
			
		||||
    const a: ViewExtents = [
 | 
			
		||||
      left,
 | 
			
		||||
      -left,
 | 
			
		||||
      bottom,
 | 
			
		||||
      -bottom,
 | 
			
		||||
      this.camera.near,
 | 
			
		||||
      this.camera.far,
 | 
			
		||||
    ]
 | 
			
		||||
    this.log('getViewFrustum', a)
 | 
			
		||||
    return a
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  getViewMatrix() : SixteenNumbers {
 | 
			
		||||
  getViewMatrix(): SixteenNumbers {
 | 
			
		||||
    // The method returns a java array containing the view 4x4 column major matrix. This may be
 | 
			
		||||
    // called by the Navigation Library when calculating a next frame. The view matrix describes the
 | 
			
		||||
    // transform from view coordinates to world coordinates of the view/camera position. Generally
 | 
			
		||||
@ -593,7 +627,7 @@ class _3DMouseThreeJSWindows implements _3DconnexionMiddleware {
 | 
			
		||||
      throw new Error(message)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    const a : SixteenNumbers = this.camera.matrixWorld.toArray()
 | 
			
		||||
    const a: SixteenNumbers = this.camera.matrixWorld.toArray()
 | 
			
		||||
    this.log('getViewMatrix', a)
 | 
			
		||||
    return a
 | 
			
		||||
  }
 | 
			
		||||
@ -602,32 +636,32 @@ class _3DMouseThreeJSWindows implements _3DconnexionMiddleware {
 | 
			
		||||
    this.log(`setActiveCommand`, id)
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  setLookFrom(data : Position) {
 | 
			
		||||
  setLookFrom(data: Position) {
 | 
			
		||||
    // Method called by the Navigation Library that defines the origin of the ray used in hit-testing.
 | 
			
		||||
    this.log('setLookFrom', data)
 | 
			
		||||
    this.look.origin.set(data[0], data[1], data[2])
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  setLookDirection(data : Position) {
 | 
			
		||||
  setLookDirection(data: Position) {
 | 
			
		||||
    // Method called by the Navigation Library that defines the direction of the ray used in hit-testing
 | 
			
		||||
    this.log('setLookDirection', data)
 | 
			
		||||
    this.look.direction.set(data[0], data[1], data[2])
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  setLookAperture(data : number) {
 | 
			
		||||
  setLookAperture(data: number) {
 | 
			
		||||
    // Method called by the Navigation Library that defines the diameter of the ray used in hit-testing.
 | 
			
		||||
    this.log('setLookAperture', data)
 | 
			
		||||
    this.look.aperture = data
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  setSelectionOnly(data : boolean) {
 | 
			
		||||
  setSelectionOnly(data: boolean) {
 | 
			
		||||
    // Method called by the Navigation Library that defines whether hit-testing should include all the
 | 
			
		||||
    // objects or be limited to the current selection set.
 | 
			
		||||
    this.log('setSelectionOnly', data)
 | 
			
		||||
    this.look.selection = data
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  setViewExtents(data : ViewExtents) {
 | 
			
		||||
  setViewExtents(data: ViewExtents) {
 | 
			
		||||
    // The method receives a 1x6 java array containing the min and max extents of the view bounding
 | 
			
		||||
    // box. The view extents defines the visible viewing volume of an orthographic projection in view
 | 
			
		||||
    // coordinates as min = [left, bottom, far] and max = [right, top, near]. The Navigation Library will
 | 
			
		||||
@ -641,7 +675,8 @@ class _3DMouseThreeJSWindows implements _3DconnexionMiddleware {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (this.camera instanceof PerspectiveCamera) {
 | 
			
		||||
      const message = 'State is mismatched, camera says perspective but the navigation library says orthographc, in setViewExtents'
 | 
			
		||||
      const message =
 | 
			
		||||
        'State is mismatched, camera says perspective but the navigation library says orthographc, in setViewExtents'
 | 
			
		||||
      this.log(message)
 | 
			
		||||
      throw new Error(message)
 | 
			
		||||
    }
 | 
			
		||||
@ -653,7 +688,7 @@ class _3DMouseThreeJSWindows implements _3DconnexionMiddleware {
 | 
			
		||||
    this.camera.updateProjectionMatrix()
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  setViewMatrix(data : SixteenNumbers) {
 | 
			
		||||
  setViewMatrix(data: SixteenNumbers) {
 | 
			
		||||
    if (!this.camera) {
 | 
			
		||||
      const message = 'Missing camera in setViewMatrix'
 | 
			
		||||
      this.log(message)
 | 
			
		||||
@ -720,7 +755,7 @@ class _3DMouseThreeJSWindows implements _3DconnexionMiddleware {
 | 
			
		||||
    this.gl.fov = (data * 180.0) / Math.PI
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  setTransaction(transaction : number) {
 | 
			
		||||
  setTransaction(transaction: number) {
 | 
			
		||||
    // Method called by the Navigation Library at the beginning and end of a frame change. At the
 | 
			
		||||
    // beginning of a frame change the Navigation Library will set the ‘transaction’ property to a
 | 
			
		||||
    // value >0. When the Navigation Library has completed the changes to the frame, the value is
 | 
			
		||||
@ -738,7 +773,7 @@ class _3DMouseThreeJSWindows implements _3DconnexionMiddleware {
 | 
			
		||||
      this.animating = true
 | 
			
		||||
      // window.requestAnimationFrame(this.render)
 | 
			
		||||
      window.requestAnimationFrame(
 | 
			
		||||
        function (theTime : number) {
 | 
			
		||||
        function (theTime: number) {
 | 
			
		||||
          this.render(theTime)
 | 
			
		||||
        }.bind(this)
 | 
			
		||||
      )
 | 
			
		||||
@ -773,14 +808,15 @@ class _3DMouseThreeJSWindows implements _3DconnexionMiddleware {
 | 
			
		||||
    // ignore application commands
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  onDisconnect(reason : any) {
 | 
			
		||||
  onDisconnect(reason: any) {
 | 
			
		||||
    this.log('onDisconnect', reason)
 | 
			
		||||
    if (this.TRACE_MESSAGES) {
 | 
			
		||||
      console.log('3Dconnexion NL-Proxy disconnected ' + reason)
 | 
			
		||||
    }
 | 
			
		||||
    this.disconnectionCallback()
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  init3DMouse(timeout?: number) : Promise<{value: boolean, message: string}> {
 | 
			
		||||
  init3DMouse(timeout?: number): Promise<{ value: boolean; message: string }> {
 | 
			
		||||
    this.log('init3DMouse')
 | 
			
		||||
    this.spaceMouse = new _3Dconnexion(this)
 | 
			
		||||
    if (!this.spaceMouse) {
 | 
			
		||||
@ -797,7 +833,10 @@ class _3DMouseThreeJSWindows implements _3DconnexionMiddleware {
 | 
			
		||||
      if (this.spaceMouse) {
 | 
			
		||||
        setTimeout(() => {
 | 
			
		||||
          if (!this.spaceMouse) {
 | 
			
		||||
            return reject({value: false, message: 'spaceMouse is missing, this is bad.'})
 | 
			
		||||
            return reject({
 | 
			
		||||
              value: false,
 | 
			
		||||
              message: 'spaceMouse is missing, this is bad.',
 | 
			
		||||
            })
 | 
			
		||||
          }
 | 
			
		||||
          let message = '3DConnexion mouse is connected'
 | 
			
		||||
          let success = true
 | 
			
		||||
 | 
			
		||||
@ -28,6 +28,7 @@ export const _3DMouseMachine = setup({
 | 
			
		||||
            canvasId: string
 | 
			
		||||
            /** Allow null because of internal retry, it will fail if this is null, we cannot have a default camera*/
 | 
			
		||||
            camera: PerspectiveCamera | OrthographicCamera | null
 | 
			
		||||
            onDisconnect : () => void
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
      | {
 | 
			
		||||
@ -36,6 +37,9 @@ export const _3DMouseMachine = setup({
 | 
			
		||||
        }
 | 
			
		||||
      | {
 | 
			
		||||
          type: _3DMouseMachineEvents.error_connect
 | 
			
		||||
      }
 | 
			
		||||
      | {
 | 
			
		||||
          type: _3DMouseMachineEvents.disconnect
 | 
			
		||||
        },
 | 
			
		||||
  },
 | 
			
		||||
  actions: {},
 | 
			
		||||
@ -50,6 +54,7 @@ export const _3DMouseMachine = setup({
 | 
			
		||||
          debug: boolean
 | 
			
		||||
          canvasId: string
 | 
			
		||||
          camera: PerspectiveCamera | OrthographicCamera | null
 | 
			
		||||
          onDisconnect: () => void
 | 
			
		||||
        }
 | 
			
		||||
      }): Promise<_3DMouseThreeJSWindows> => {
 | 
			
		||||
        console.error('I AM CONNECTING TOO MANY TIMES')
 | 
			
		||||
@ -85,12 +90,20 @@ export const _3DMouseMachine = setup({
 | 
			
		||||
        //   camera: input.camera.clone(),
 | 
			
		||||
        // })
 | 
			
		||||
 | 
			
		||||
        // delete old mouse before creating a new one!
 | 
			
		||||
        // This is important when someone disconnects and we reconnect
 | 
			
		||||
        if (input.context._3dMouse) {
 | 
			
		||||
          input.context._3dMouse.destroy()
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        const the3DMouse = new _3DMouseThreeJSWindows({
 | 
			
		||||
          // Name needs to be registered in the python proxy server!
 | 
			
		||||
          appName: input.name,
 | 
			
		||||
          debug: input.debug,
 | 
			
		||||
          canvasId: input.canvasId,
 | 
			
		||||
          camera: input.camera.clone(),
 | 
			
		||||
          TRACE_MESSAGES: true,
 | 
			
		||||
          disconnectCallback: input.onDisconnect
 | 
			
		||||
        })
 | 
			
		||||
 | 
			
		||||
        /**
 | 
			
		||||
@ -119,6 +132,12 @@ export const _3DMouseMachine = setup({
 | 
			
		||||
    /** retry 3 times before the user needs to manually click a connect button to retry */
 | 
			
		||||
    maxRetries: 3,
 | 
			
		||||
  }),
 | 
			
		||||
  on: {
 | 
			
		||||
    [_3DMouseMachineEvents.disconnect]: {
 | 
			
		||||
      // root state
 | 
			
		||||
      target: '.' + _3DMouseMachineStates.waitingToConnect
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  states: {
 | 
			
		||||
    [_3DMouseMachineStates.waitingToConnect]: {
 | 
			
		||||
      on: {
 | 
			
		||||
@ -139,14 +158,20 @@ export const _3DMouseMachine = setup({
 | 
			
		||||
      invoke: {
 | 
			
		||||
        id: _3DMouseMachineActors.connect,
 | 
			
		||||
        src: _3DMouseMachineActors.connect,
 | 
			
		||||
        input: ({ context, event }) => {
 | 
			
		||||
        input: ({ context, event, self }) => {
 | 
			
		||||
          assertEvent(event, _3DMouseMachineEvents.connect)
 | 
			
		||||
 | 
			
		||||
          const onDisconnectHelperFunction = () => {
 | 
			
		||||
            self.send({type: _3DMouseMachineEvents.disconnect})
 | 
			
		||||
          }
 | 
			
		||||
 | 
			
		||||
          return {
 | 
			
		||||
            context,
 | 
			
		||||
            name: event.data.name,
 | 
			
		||||
            debug: event.data.debug,
 | 
			
		||||
            canvasId: event.data.canvasId,
 | 
			
		||||
            camera: event.data.camera,
 | 
			
		||||
            onDisconnect: onDisconnectHelperFunction
 | 
			
		||||
          }
 | 
			
		||||
        },
 | 
			
		||||
        onDone: {
 | 
			
		||||
@ -195,8 +220,13 @@ export const _3DMouseMachine = setup({
 | 
			
		||||
      invoke: {
 | 
			
		||||
        id: _3DMouseMachineActors.connect,
 | 
			
		||||
        src: _3DMouseMachineActors.connect,
 | 
			
		||||
        input: ({ context, event }) => {
 | 
			
		||||
        input: ({ context, event, self }) => {
 | 
			
		||||
          assertEvent(event, _3DMouseMachineEvents.error_connect)
 | 
			
		||||
 | 
			
		||||
          const onDisconnectHelperFunction = () => {
 | 
			
		||||
            self.send({type: _3DMouseMachineEvents.disconnect})
 | 
			
		||||
          }
 | 
			
		||||
 | 
			
		||||
          let { name, debug, canvasId, camera } =
 | 
			
		||||
            context.lastConfigurationForConnection || {
 | 
			
		||||
              name: '',
 | 
			
		||||
@ -213,6 +243,7 @@ export const _3DMouseMachine = setup({
 | 
			
		||||
            debug,
 | 
			
		||||
            canvasId,
 | 
			
		||||
            camera,
 | 
			
		||||
            onDisconnect: onDisconnectHelperFunction
 | 
			
		||||
          }
 | 
			
		||||
        },
 | 
			
		||||
        onDone: {
 | 
			
		||||
 | 
			
		||||
@ -32,6 +32,7 @@ export enum _3DMouseMachineEvents {
 | 
			
		||||
  connect = 'connect',
 | 
			
		||||
  done_connect = donePrefix + 'connect',
 | 
			
		||||
  error_connect = errorPrefix + 'connect',
 | 
			
		||||
  disconnect = 'disconnect'
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export enum _3DMouseMachineActors {
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user