networked-aframe
Version:
A web framework for building multi-user virtual reality experiences.
66 lines (55 loc) • 1.91 kB
JavaScript
/* global AFRAME, NAF */
AFRAME.registerComponent('networked-scene', {
schema: {
serverURL: {default: '/'},
app: {default: 'default'},
room: {default: 'default'},
connectOnLoad: {default: true},
onConnect: {default: 'onConnect'},
adapter: {default: 'wseasyrtc'}, // See https://github.com/networked-aframe/networked-aframe#adapters for list of adapters
audio: {default: false}, // Only if adapter supports audio
video: {default: false}, // Only if adapter supports video
debug: {default: false},
},
init: function() {
var el = this.el;
this.connect = this.connect.bind(this);
el.addEventListener('connect', this.connect);
if (this.data.connectOnLoad) {
el.emit('connect', null, false);
}
},
/**
* Connect to signalling server and begin connecting to other clients
*/
connect: function () {
NAF.log.setDebug(this.data.debug);
NAF.log.write('Networked-Aframe Connecting...');
this.checkDeprecatedProperties();
this.setupNetworkAdapter();
if (this.hasOnConnectFunction()) {
this.callOnConnect();
}
return NAF.connection.connect(this.data.serverURL, this.data.app, this.data.room, this.data.audio, this.data.video);
},
checkDeprecatedProperties: function() {
// No current
},
setupNetworkAdapter: function() {
var adapterName = this.data.adapter;
var adapter = NAF.adapters.make(adapterName);
NAF.connection.setNetworkAdapter(adapter);
this.el.emit('adapter-ready', adapter, false);
},
hasOnConnectFunction: function() {
return this.data.onConnect != '' && window[this.data.onConnect];
},
callOnConnect: function() {
NAF.connection.onConnect(window[this.data.onConnect]);
},
remove: function() {
NAF.log.write('networked-scene disconnected');
this.el.removeEventListener('connect', this.connect);
NAF.connection.disconnect();
}
});