UNPKG

1.51 kBJavaScriptView Raw
1var Registry = require('./registry');
2var util = require('util');
3var uuid = require('uuid');
4var Query = require('calypso').Query;
5var path = require('path');
6
7var PeerRegistry = module.exports = function(opts) {
8 if(!opts) {
9 opts = {
10 path: path.join(process.cwd(), './.peers'),
11 collection: 'peers'
12 };
13 }
14
15 Registry.call(this, opts);
16};
17util.inherits(PeerRegistry, Registry);
18
19PeerRegistry.prototype.save = function(peer, cb) {
20 if(peer.status !== 'failed' && peer.hasOwnProperty('error')) {
21 delete peer.error;
22 }
23
24 peer.updated = Date.now();
25
26 this.db.put(peer.id, peer, { valueEncoding: 'json' }, cb);
27}
28
29PeerRegistry.prototype.add = function(peer, cb) {
30 var self = this;
31
32 var peerQuery = Query.of('peers');
33 var whereObject = {};
34
35 if(peer.id) {
36 whereObject.id = JSON.stringify(peer.id);
37 } else if(peer.url) {
38 whereObject.url = peer.url;
39 }
40 peerQuery.where(whereObject);
41 self.find(peerQuery, function(err, results) {
42 if(err && cb) {
43 return cb(err);
44 }
45
46 var result = (results && results.length) ? results[0] : null;
47 if(result) {
48 result.status = peer.status;
49 }
50
51 peer = result || peer;
52
53 if(!peer.id) {
54 peer.id = uuid.v4();
55 }
56
57 peer.status = peer.status || 'connecting';
58 peer.direction = peer.direction || 'initiator';
59
60 self.save(peer, function(err) {
61 if(err && cb) {
62 return cb(err);
63 }
64
65 if(cb) {
66 cb(null, peer);
67 }
68 });
69 });
70
71};
72