mirror of
https://github.com/kremalicious/metamask-extension.git
synced 2024-12-23 09:52:26 +01:00
5ceed48db9
I'd returned this line because it seemed to fix Firefox compatibility, now it seems like that wasn't the case. Removing it again.
98 lines
2.0 KiB
JavaScript
98 lines
2.0 KiB
JavaScript
const Dnode = require('dnode')
|
|
const inherits = require('util').inherits
|
|
|
|
module.exports = {
|
|
HostStore: HostStore,
|
|
RemoteStore: RemoteStore,
|
|
}
|
|
|
|
function BaseStore (initState) {
|
|
this._state = initState || {}
|
|
this._subs = []
|
|
}
|
|
|
|
BaseStore.prototype.set = function (key, value) {
|
|
throw Error('Not implemented.')
|
|
}
|
|
|
|
BaseStore.prototype.get = function (key) {
|
|
return this._state[key]
|
|
}
|
|
|
|
BaseStore.prototype.subscribe = function (fn) {
|
|
this._subs.push(fn)
|
|
var unsubscribe = this.unsubscribe.bind(this, fn)
|
|
return unsubscribe
|
|
}
|
|
|
|
BaseStore.prototype.unsubscribe = function (fn) {
|
|
var index = this._subs.indexOf(fn)
|
|
if (index !== -1) this._subs.splice(index, 1)
|
|
}
|
|
|
|
BaseStore.prototype._emitUpdates = function (state) {
|
|
this._subs.forEach(function (handler) {
|
|
handler(state)
|
|
})
|
|
}
|
|
|
|
//
|
|
// host
|
|
//
|
|
|
|
inherits(HostStore, BaseStore)
|
|
function HostStore (initState, opts) {
|
|
BaseStore.call(this, initState)
|
|
}
|
|
|
|
HostStore.prototype.set = function (key, value) {
|
|
this._state[key] = value
|
|
process.nextTick(this._emitUpdates.bind(this, this._state))
|
|
}
|
|
|
|
HostStore.prototype.createStream = function () {
|
|
var dnode = Dnode({
|
|
// update: this._didUpdate.bind(this),
|
|
})
|
|
dnode.on('remote', this._didConnect.bind(this))
|
|
return dnode
|
|
}
|
|
|
|
HostStore.prototype._didConnect = function (remote) {
|
|
this.subscribe(function (state) {
|
|
remote.update(state)
|
|
})
|
|
remote.update(this._state)
|
|
}
|
|
|
|
//
|
|
// remote
|
|
//
|
|
|
|
inherits(RemoteStore, BaseStore)
|
|
function RemoteStore (initState, opts) {
|
|
BaseStore.call(this, initState)
|
|
this._remote = null
|
|
}
|
|
|
|
RemoteStore.prototype.set = function (key, value) {
|
|
this._remote.set(key, value)
|
|
}
|
|
|
|
RemoteStore.prototype.createStream = function () {
|
|
var dnode = Dnode({
|
|
update: this._didUpdate.bind(this),
|
|
})
|
|
dnode.once('remote', this._didConnect.bind(this))
|
|
return dnode
|
|
}
|
|
|
|
RemoteStore.prototype._didConnect = function (remote) {
|
|
this._remote = remote
|
|
}
|
|
|
|
RemoteStore.prototype._didUpdate = function (state) {
|
|
this._state = state
|
|
this._emitUpdates(state)
|
|
}
|