exokitxr / exokit

Native VR/AR/XR engine for JavaScript 🦖
MIT License
994 stars 117 forks source link

Networked A-Frame new connections force exokit to close #1217

Open kfarr opened 5 years ago

kfarr commented 5 years ago

Describe the bug What happened, and what did you expect to happen?

When using an a-frame project with networked aframe component, and when a new user joins the scene, exokit closes, usually without an error message.

Instead I would expect exokit to stay running and that both users can interact in the scene together.

To Reproduce Steps or commands ran to reproduce the behavior:

Install and build exokit 1462531950b59511fca5d7c6c21853b2a27f4fd2 git clone from https://github.com/MozillaReality/networked-aframe (NAF 27d9765bef5f0e10617a4f7dd8dc33572219db05) npm install npm run dev

in exokit dir: node . -x webvr localhost:8080/tracked-controllers.html

then open in another browser localhost:8080/tracked-controllers.html

exokit will crash within a few seconds but usually with no error. sometimes a console error is displayed:

uncaught exception: TypeError: Cannot read property 'owner' of undefined
    at i.networkUpdate (/build.js:1895:19)
    at NetworkEntities.updateEntity (/build.js:663:53)
    at NetworkConnection.receivedData (/build.js:570:37)
    at Easyrtc.receivePeerDistribute (/easyrtc/easyrtc.js:5103:25)
    at Socket.onChannelMsg (/easyrtc/easyrtc.js:7389:18)
    at Socket.Emitter.emit (https://cdnjs.cloudflare.com/ajax/libs/socket.io/1.4.5/socket.io.min.js:3:10860)
    at Socket.onevent (https://cdnjs.cloudflare.com/ajax/libs/socket.io/1.4.5/socket.io.min.js:3:5790)
    at Socket.onpacket (https://cdnjs.cloudflare.com/ajax/libs/socket.io/1.4.5/socket.io.min.js:3:5306)
    at Manager.<anonymous> (https://cdnjs.cloudflare.com/ajax/libs/socket.io/1.4.5/socket.io.min.js:3:9520)
    at Manager.Emitter.emit (https://cdnjs.cloudflare.com/ajax/libs/socket.io/1.4.5/socket.io.min.js:3:10860)

Additional context Add any other context about the problem here.

workaround - load exokit last after other naf users have joined

System information:

Screenshots If applicable, add screenshots to help explain your problem.

kfarr commented 5 years ago

unfortunately the "workaround" of running other client first before opening exokit doesn't actually seem to work, exokit user isn't providing pose updates to the scene

avaer commented 5 years ago

Managed to repro the "no pose update".

avaer commented 5 years ago

I think there are several issues here. The first is a timers bug: https://github.com/exokitxr/exokit/pull/1218

avaer commented 5 years ago

The current bug is:

The browser input will not be reflected in Exokit's view.

avaer commented 5 years ago

☝️ The above only happened when using websockets, so it could be a rarely-tested corner case for NAF.

I was unable to reproduce any crashes or hangs with the current code in master.

@kfarr Can you confirm?

kfarr commented 5 years ago

☝️ The above only happened when using websockets, so it could be a rarely-tested corner case for NAF.

Unfortunately this test case is intending to use websockets but I will experiment with the alternate protocols such as firebase as a workaround

I am still able to reliably reproduce this issue with 6fc129dd8c0e7bdd688fe56afa2754a203c4c3ff

kfarr commented 5 years ago

There is application error on other WebVR browser (Firefox) when following the same instructions, so not just an exokit issue. (When add'l client connects after Firefox WebVR mode was first client, then WebVR client resets its tracked poses to 0 0 0 and stops sending updates.

Digging in more.

avaer commented 5 years ago

Thanks, does that mean the repro requires setting websockets as the protocol (as opposed to RTC)?

kfarr commented 5 years ago

For me I see issue with both and it's my understanding that websockets is default https://github.com/MozillaReality/networked-aframe#adapters

I do not see issue tab on that repo so I have not filed w/NAF.