-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.js
57 lines (44 loc) · 1.28 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
'use strict';
var util = require('util');
var ReplicatorCommon = require('replicate-common');
var LocalStorageReplicator = function(name, storage) {
ReplicatorCommon.call(this, name);
// LocalStorageReplicator
this.localStorage = storage;
this.replData = [];
this.marker = '__end__';
};
util.inherits(LocalStorageReplicator, ReplicatorCommon);
module.exports = LocalStorageReplicator;
LocalStorageReplicator.prototype.receiveData = function(chunk) {
var self = this;
// note double-equals to coerce arraybuffer to string
if (chunk == self.marker) {
self._getAndClearData();
} else {
self.replData.push(chunk);
}
};
LocalStorageReplicator.prototype._getAndClearData = function() {
var self = this;
var data = self.replData.join('');
self.replData = [];
var msg = JSON.parse(data);
var key = msg.key;
var dataJson = JSON.stringify(msg.data);
self.localStorage.setItem(key, dataJson);
self.emit('endpeerreplicate', key, dataJson);
};
LocalStorageReplicator.prototype.replicate = function(key) {
var self = this;
var store = JSON.parse(self.localStorage.getItem(key));
var msg = {
'data': store,
'key': key
};
self.streams.forEach(function(s) {
s.write(JSON.stringify(msg));
s.write(self.marker);
});
return Promise.resolve();
};