Skip to content

Instantly share code, notes, and snippets.

@robertkowalski
Last active August 23, 2019 17:07
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save robertkowalski/d820be8c54582caf03a9bf58db156cdc to your computer and use it in GitHub Desktop.
Save robertkowalski/d820be8c54582caf03a9bf58db156cdc to your computer and use it in GitHub Desktop.
// wrap "old" sunbeam instance so usage stays same for users
class Sbw {
constructor(client, opts) {
const w = new Sunbeam({}, opts)
const trap = {
get: function(obj, prop) {
if (obj[prop]) return obj[prop]
if (/^on.*/.test(prop)) {
const hook = obj.msgHandler.addCallback(prop)
// cache
obj[prop] = hook
return hook
}
}
}
var ws = new Proxy(w, trap);
return ws
}
}
const ws = new Sbw({}, opts)
ws.on('open', () => {
ws.onOrderBook({ symbol: 'EOS.USD' }, (ob) => {
console.log('ws.onOrderBook({ symbol: "EOS.USD" }')
console.log(ob)
})
ws.subscribeOrderBook('EOS.USD')
})
ws.open()
class MsgHandler extends EventEmitter {
constructor (opts) {
super()
this.conf = conf
this._channels = {}
this.conf.transports.pub.on('message', this.handleMessage.bind(this))
this.handlers = {}
}
addCallback (name) {
const hook = (filter, handler) => {
let mod = 'def'
if (filter && filter.symbol) {
mod = filter.symbol
}
const [handlerNamePlain] = this.getHandlerNames(name, mod)
console.log("setting hook", handlerNamePlain)
this.handlers[handlerNamePlain] = handler
}
return hook
}
getHandlerNames (name, mod) {
if (/^on/.test(name)) {
const plain = name + '#' + mod
const managed = name + '#' + mod
return [plain, managed]
}
const plain = 'on' + name + '#' + mod
const managed = 'onManaged' + name + '#' + mod
return [plain, managed]
}
handleMessage (msg) {
if (Array.isArray(msg)) {
const [ chanId, data ] = msg
this.handleOrderbookMessage(chanId, data, msg)
}
}
handleOrderbookMessage (chanId, data, msg) {
if (!this._channels['book'][chanId]) {
return
}
const { symbol } = this._channels['book'][chanId]
const [pcb, mcb] = this.getHandlerNames('OrderBook', symbol)
if (this.handlers[pcb]) {
this.handlers[pcb](data)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment