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