1 | var Registry = require('./registry');
|
2 | var util = require('util');
|
3 | var uuid = require('node-uuid');
|
4 | var Query = require('calypso').Query;
|
5 | var path = require('path');
|
6 |
|
7 | var 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 | };
|
17 | util.inherits(PeerRegistry, Registry);
|
18 |
|
19 | PeerRegistry.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 |
|
29 | PeerRegistry.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 |
|