Merge pull request #113 from MetaMask/i53
publicConfigStore for sync provider and selected addressfeature/default_network_editable
commit
83b8741bbb
@ -0,0 +1,97 @@ |
|||||||
|
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) |
||||||
|
} |
Loading…
Reference in new issue