remix-project mirror
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
remix-project/src/registry.js

62 lines
1.5 KiB

7 years ago
const moduleID = require('./module-id.js')
const remixLib = require('remix-lib')
const EventManager = remixLib.EventManager
module.exports = class registry {
constructor () {
this.state = {}
}
put ({ api, events, name }) {
const serveruid = moduleID() + '.' + (name || '')
console.log('registering ', serveruid)
if (this.state[serveruid]) return this.state[serveruid]
const server = {
uid: serveruid,
// api: new ApiManager(api),
events: makeEvents(events),
legacyEvents: api.event ? api.event : new EventManager()
}
this.state[serveruid] = {
_name: name,
_api: api,
_events: events,
server: server,
clients: []
}
return server
}
get (uid) {
const clientuid = moduleID()
const state = this.state[uid]
if (!state) return
const server = state.server
const client = {
uid: clientuid,
api: state._api,
events: server.events,
legacyEvents: server.legacyEvents
}
server.clients.push(client)
return client
}
}
function makeEvents (events) {
if (!events) return []
function update (name) { update[name] = new EventManager() }
return events.reduce((fn, x) => {
fn[x] = new EventManager()
var oldTrigger = fn[x].trigger
fn[x].trigger = (name, args) => {
console.log(name)
oldTrigger.call(fn[x], name, args)
}
var oldRegister = fn[x].register
fn[x].register = (name, obj, fn) => {
console.log(name)
oldRegister.call(fn[x], obj, fn)
}
return fn
}, update)
}