xrfragment-haxe/src/3rd/js/plugin/frontend/network.js

80 lines
2 KiB
JavaScript
Raw Normal View History

2023-12-27 17:25:49 +00:00
// this orchestrates multiplayer events from the scene graph
window.network = (opts) => new Proxy({
connected: false,
2024-01-03 14:23:34 +00:00
pos: '',
2024-01-10 22:01:21 +01:00
posName: '',
2023-12-27 21:31:42 +00:00
meetinglink: "",
2023-12-27 17:25:49 +00:00
peers: {},
plugin: {},
opts,
2024-01-03 14:23:34 +00:00
init(){
document.addEventListener('network.disconnect', () => this.connected = false )
document.addEventListener('network.connected', () => this.connected = true )
setTimeout( () => window.frontend.emit('network.init'), 100 )
return this
},
connect(opts){
window.frontend.emit(`network.${this.connected?'disconnect':'connect'}`,opts)
2023-12-27 17:25:49 +00:00
},
add(peerid,data){
data = {lastUpdated: new Date().getTime(), id: peerid, ...data }
this.peers[peerid] = data
2024-01-03 14:23:34 +00:00
window.frontend.emit(`network.peer.add`,{peer})
2023-12-27 17:25:49 +00:00
},
remove(peerid,data){
delete this.peers[peerid]
2024-01-03 14:23:34 +00:00
window.frontend.emit(`network.peer.remove`,{peer})
2023-12-27 17:25:49 +00:00
},
send(opts){
2024-01-03 14:23:34 +00:00
window.frontend.emit('network.send',opts)
2023-12-27 17:25:49 +00:00
},
receive(opts){
2024-01-03 14:23:34 +00:00
},
getMeetingFromUrl(url){
let hash = url.replace(/.*#/,'')
let parts = hash.split("&")
let meeting = ''
parts.map( (p) => {
if( p.split("=")[0] == 'meet' ) meeting = p.split("=")[1]
})
return meeting
},
randomRoom(){
var names = []
let add = (s) => s.length < 6 && !s.match(/[0-9$]/) && !s.match(/_/) ? names.push(s) : false
for ( var i in window ) add(i)
for ( var i in Object.prototype ) add(i)
for ( var i in Function.prototype ) add(i)
for ( var i in Array.prototype ) add(i)
for ( var i in String.prototype ) add(i)
var a = names[Math.floor(Math.random() * names.length)];
var b = names[Math.floor(Math.random() * names.length)];
return String(`${a}-${b}-${String(Math.random()).substr(13)}`).toLowerCase()
2023-12-27 17:25:49 +00:00
}
},
{
// auto-trigger events on changes
get(data,k,receiver){ return data[k] },
set(data,k,v){
let from = data[k]
data[k] = v
}
})
2024-01-03 14:23:34 +00:00
document.addEventListener('frontend:ready', (e) => {
window.network = network(e.detail).init()
2023-12-27 17:25:49 +00:00
document.dispatchEvent( new CustomEvent("network:ready", e ) )
})