Changeset View
Changeset View
Standalone View
Standalone View
support/aphlict/server/lib/AphlictPeer.js
- This file was added.
'use strict'; | |||||
var JX = require('./javelin').JX; | |||||
var http = require('http'); | |||||
var https = require('https'); | |||||
JX.install('AphlictPeer', { | |||||
construct: function() { | |||||
}, | |||||
properties: { | |||||
host: null, | |||||
port: null, | |||||
protocol: null, | |||||
fingerprint: null | |||||
}, | |||||
members: { | |||||
broadcastMessage: function(instance, message) { | |||||
var data; | |||||
try { | |||||
data = JSON.stringify(message); | |||||
} catch (error) { | |||||
return; | |||||
} | |||||
// TODO: Maybe use "agent" stuff to pool connections? | |||||
var options = { | |||||
hostname: this.getHost(), | |||||
port: this.getPort(), | |||||
method: 'POST', | |||||
path: '/?instance=' + instance, | |||||
headers: { | |||||
'Content-Type': 'application/json', | |||||
'Content-Length': data.length | |||||
} | |||||
}; | |||||
var onresponse = JX.bind(this, this._onresponse); | |||||
var request; | |||||
if (this.getProtocol() == 'https') { | |||||
request = https.request(options, onresponse); | |||||
} else { | |||||
request = http.request(options, onresponse); | |||||
} | |||||
request.write(data); | |||||
request.end(); | |||||
}, | |||||
_onresponse: function(response) { | |||||
var peer = this; | |||||
var data = ''; | |||||
response.on('data', function(bytes) { | |||||
data += bytes; | |||||
}); | |||||
response.on('end', function() { | |||||
var message; | |||||
try { | |||||
message = JSON.parse(data); | |||||
} catch (error) { | |||||
return; | |||||
} | |||||
// If we got a valid receipt, update the fingerprint for this server. | |||||
var fingerprint = message.fingerprint; | |||||
if (fingerprint) { | |||||
peer.setFingerprint(fingerprint); | |||||
} | |||||
}); | |||||
} | |||||
} | |||||
}); |