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); | |||||
| } | |||||
| }); | |||||
| } | |||||
| } | |||||
| }); | |||||