Last active
August 23, 2019 17:07
-
-
Save robertkowalski/d820be8c54582caf03a9bf58db156cdc to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// 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() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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