Statistics; deduplication of outgoing routes

This commit is contained in:
Tony Garnock-Jones 2014-07-21 17:42:29 -07:00
parent a0b3ac3198
commit 0025e6b3af
1 changed files with 22 additions and 4 deletions

View File

@ -8,14 +8,19 @@ var DEFAULT_PING_INTERVAL = DEFAULT_IDLE_TIMEOUT - 10000;
function WebSocketConnection(label, wsurl, shouldReconnect) {
this.label = label;
this.sendsAttempted = 0;
this.sendsTransmitted = 0;
this.receiveCount = 0;
this.sock = null;
this.wsurl = wsurl;
this.shouldReconnect = shouldReconnect ? true : false;
this.reconnectDelay = DEFAULT_RECONNECT_DELAY;
this.localGestalt = route.emptyGestalt;
this.peerGestalt = route.emptyGestalt;
this.prevLocalRoutesMessage = null;
this.prevPeerRoutesMessage = null;
this.sock = null;
this.deduplicator = new Deduplicator();
this.connectionCount = 0;
this.activityTimestamp = 0;
this.idleTimeout = DEFAULT_IDLE_TIMEOUT;
@ -72,14 +77,22 @@ WebSocketConnection.prototype.isConnected = function () {
WebSocketConnection.prototype.safeSend = function (m) {
try {
if (this.isConnected()) { this.sock.send(m); }
this.sendsAttempted++;
if (this.isConnected()) {
this.sock.send(m);
this.sendsTransmitted++;
}
} catch (e) {
console.warn("Trapped exn while sending", e);
}
};
WebSocketConnection.prototype.sendLocalRoutes = function () {
this.safeSend(JSON.stringify(encodeEvent(updateRoutes([this.localGestalt]))));
var newLocalRoutesMessage = JSON.stringify(encodeEvent(updateRoutes([this.localGestalt])));
if (this.prevLocalRoutesMessage !== newLocalRoutesMessage) {
this.prevLocalRoutesMessage = newLocalRoutesMessage;
this.safeSend(newLocalRoutesMessage);
}
};
WebSocketConnection.prototype.collectMatchers = function (getAdvertisements, level, g) {
@ -138,15 +151,20 @@ WebSocketConnection.prototype.forceclose = function (keepReconnectDelay) {
WebSocketConnection.prototype.reconnect = function () {
var self = this;
this.forceclose(true);
this.connectionCount++;
this.sock = new WebSocket(this.wsurl);
this.sock.onopen = World.wrap(function (e) { return self.onopen(e); });
this.sock.onmessage = World.wrap(function (e) { return self.onmessage(e); });
this.sock.onmessage = World.wrap(function (e) {
self.receiveCount++;
return self.onmessage(e);
});
this.sock.onclose = World.wrap(function (e) { return self.onclose(e); });
};
WebSocketConnection.prototype.onopen = function (e) {
console.log("connected to " + this.sock.url);
this.reconnectDelay = DEFAULT_RECONNECT_DELAY;
this.prevLocalRoutesMessage = null;
this.sendLocalRoutes();
};