http: refactor websocket handling.
This commit is contained in:
parent
375699c6c5
commit
14da6a0875
@ -946,17 +946,17 @@ HTTPServer.prototype._initIO = function _initIO() {
|
|||||||
socket.destroy();
|
socket.destroy();
|
||||||
});
|
});
|
||||||
|
|
||||||
socket.once('auth', function(apiKey, callback) {
|
socket.on('auth', function(args, callback) {
|
||||||
if (typeof callback !== 'function')
|
var apiKey = args[0];
|
||||||
return socket.destroy();
|
|
||||||
|
if (socket.auth)
|
||||||
|
return callback({ error: 'Already authed.' });
|
||||||
|
|
||||||
socket.stop();
|
socket.stop();
|
||||||
|
|
||||||
if (self.apiHash) {
|
if (self.apiHash) {
|
||||||
if (!utils.ccmp(hash256(apiKey), self.apiHash)) {
|
if (!utils.ccmp(hash256(apiKey), self.apiHash))
|
||||||
socket.destroy();
|
|
||||||
return callback({ error: 'Bad key.' });
|
return callback({ error: 'Bad key.' });
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
socket.auth = true;
|
socket.auth = true;
|
||||||
@ -976,9 +976,9 @@ HTTPServer.prototype._initIO = function _initIO() {
|
|||||||
});
|
});
|
||||||
|
|
||||||
this.on('websocket', function(socket) {
|
this.on('websocket', function(socket) {
|
||||||
socket.on('wallet join', function(id, token, callback) {
|
socket.on('wallet join', function(args, callback) {
|
||||||
if (typeof callback !== 'function')
|
var id = args[0];
|
||||||
return socket.destroy();
|
var token = args[1];
|
||||||
|
|
||||||
if (typeof id !== 'string')
|
if (typeof id !== 'string')
|
||||||
return callback({ error: 'Invalid parameter.' });
|
return callback({ error: 'Invalid parameter.' });
|
||||||
@ -988,7 +988,7 @@ HTTPServer.prototype._initIO = function _initIO() {
|
|||||||
return callback();
|
return callback();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (typeof token !== 'string')
|
if (!utils.isHex256(token))
|
||||||
return callback({ error: 'Invalid parameter.' });
|
return callback({ error: 'Invalid parameter.' });
|
||||||
|
|
||||||
self.walletdb.auth(id, token, function(err, wallet) {
|
self.walletdb.auth(id, token, function(err, wallet) {
|
||||||
@ -1008,9 +1008,8 @@ HTTPServer.prototype._initIO = function _initIO() {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
socket.on('wallet leave', function(id, callback) {
|
socket.on('wallet leave', function(args, callback) {
|
||||||
if (typeof callback !== 'function')
|
var id = args[0];
|
||||||
return socket.destroy();
|
|
||||||
|
|
||||||
if (typeof id !== 'string')
|
if (typeof id !== 'string')
|
||||||
return callback({ error: 'Invalid parameter.' });
|
return callback({ error: 'Invalid parameter.' });
|
||||||
@ -1020,48 +1019,57 @@ HTTPServer.prototype._initIO = function _initIO() {
|
|||||||
callback();
|
callback();
|
||||||
});
|
});
|
||||||
|
|
||||||
socket.on('watch chain', function() {
|
socket.on('watch chain', function(args, callback) {
|
||||||
socket.watchChain();
|
socket.watchChain();
|
||||||
|
callback();
|
||||||
});
|
});
|
||||||
|
|
||||||
socket.on('unwatch chain', function() {
|
socket.on('unwatch chain', function(args, callback) {
|
||||||
socket.unwatchChain();
|
socket.unwatchChain();
|
||||||
|
callback();
|
||||||
});
|
});
|
||||||
|
|
||||||
socket.on('watch address', function(addresses) {
|
socket.on('watch address', function(args, callback) {
|
||||||
|
var addresses = args[0];
|
||||||
|
|
||||||
if (!Array.isArray(addresses))
|
if (!Array.isArray(addresses))
|
||||||
return socket.destroy();
|
return callback({ error: 'Invalid parameter.' });
|
||||||
|
|
||||||
try {
|
try {
|
||||||
socket.addFilter(addresses);
|
socket.addFilter(addresses);
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
return socket.destroy();
|
return callback({ error: e.message });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
callback();
|
||||||
});
|
});
|
||||||
|
|
||||||
socket.on('unwatch address', function(addresses) {
|
socket.on('unwatch address', function(args, callback) {
|
||||||
|
var addresses = args[0];
|
||||||
|
|
||||||
if (!Array.isArray(addresses))
|
if (!Array.isArray(addresses))
|
||||||
return socket.destroy();
|
return callback({ error: 'Invalid parameter.' });
|
||||||
|
|
||||||
try {
|
try {
|
||||||
socket.removeFilter(addresses);
|
socket.removeFilter(addresses);
|
||||||
} catch (e) {
|
|
||||||
return socket.destroy();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
socket.on('scan chain', function(start, callback) {
|
|
||||||
if (typeof callback !== 'function')
|
|
||||||
return socket.destroy();
|
|
||||||
|
|
||||||
if (typeof start !== 'string' && !utils.isNumber(start))
|
|
||||||
return callback({ error: 'Invalid parameter.' });
|
|
||||||
|
|
||||||
try {
|
|
||||||
socket.scan(start, callback);
|
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
return callback({ error: e.message });
|
return callback({ error: e.message });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
callback();
|
||||||
|
});
|
||||||
|
|
||||||
|
socket.on('scan chain', function(args, callback) {
|
||||||
|
var start = args[0];
|
||||||
|
|
||||||
|
if (!utils.isHex256(start) && !utils.isNumber(start))
|
||||||
|
return callback({ error: 'Invalid parameter.' });
|
||||||
|
|
||||||
|
socket.scan(start, function(err) {
|
||||||
|
if (err)
|
||||||
|
return callback({ error: err.message });
|
||||||
|
callback();
|
||||||
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -1232,7 +1240,16 @@ ClientSocket.prototype._init = function _init() {
|
|||||||
socket.onevent = function(packet) {
|
socket.onevent = function(packet) {
|
||||||
var result = onevent(packet);
|
var result = onevent(packet);
|
||||||
var args = packet.data || [];
|
var args = packet.data || [];
|
||||||
emit.apply(self, args);
|
var event = args.shift();
|
||||||
|
var ack;
|
||||||
|
|
||||||
|
if (typeof args[args.length - 1] === 'function')
|
||||||
|
ack = args.pop();
|
||||||
|
else
|
||||||
|
ack = self.socket.ack(packet.id);
|
||||||
|
|
||||||
|
emit.apply(self, [event, args, ack]);
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -1381,12 +1398,9 @@ ClientSocket.prototype.scan = function scan(start, callback) {
|
|||||||
txs[i] = txs[i].toJSON();
|
txs[i] = txs[i].toJSON();
|
||||||
|
|
||||||
self.emit('block tx', entry.toJSON(), txs);
|
self.emit('block tx', entry.toJSON(), txs);
|
||||||
|
|
||||||
next();
|
next();
|
||||||
}, function(err) {
|
}, callback);
|
||||||
if (err)
|
|
||||||
return callback({ error: err.message });
|
|
||||||
callback();
|
|
||||||
});
|
|
||||||
};
|
};
|
||||||
|
|
||||||
ClientSocket.prototype.join = function join(id) {
|
ClientSocket.prototype.join = function join(id) {
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user