send(nodeID, type, data) {
		return this.Promise.resolve()
			.then(() => {
				let socket = this.sockets.get(nodeID);
				if (socket && !socket.destroyed) return socket;

				return this.connect(nodeID);
			})
			.then(socket => {
				if (
					[PACKET_GOSSIP_REQ_ID, PACKET_GOSSIP_RES_ID, PACKET_GOSSIP_HELLO_ID].indexOf(
						type
					) == -1
				)
					socket.lastUsed = Date.now();

				return new this.Promise((resolve, reject) => {
					// Create binary payload
					const header = Buffer.alloc(HEADER_SIZE);
					header.writeInt32BE(data.length + HEADER_SIZE, 1);
					header.writeInt8(type, 5);
					const crc = header[1] ^ header[2] ^ header[3] ^ header[4] ^ header[5];
					header[0] = crc;

					const payload = Buffer.concat([header, data]);

					try {
						socket.write(payload, () => {
							//this.logger.info(`${type} packet sent to ${nodeID}.`);
							//this.logger.info(data.toString());
							resolve();
						});
					} catch (err) {
						this.removeSocket(nodeID);
						reject(err);
					}
				});
			});
	}
Send a message to a remote node

@param {String} nodeID
@param {Number} type
@param {Buffer} data