omelop
Version:
[](https://travis-ci.org/node-omelop/omelop)
119 lines • 9.46 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.HandshakeCommand = void 0;
const omelop_1 = require("../../omelop");
const omelop_protocol_1 = require("omelop-protocol");
let CODE_OK = 200;
let CODE_USE_ERROR = 500;
let CODE_OLD_CLIENT = 501;
/**
* Process the handshake request.
*
* @param {Object} opts option parameters
* opts.handshake(msg, cb(err, resp)) handshake callback. msg is the handshake message from client.
* opts.hearbeat heartbeat interval (level?)
* opts.version required client level
*/
class HandshakeCommand {
constructor(opts) {
opts = opts || {};
this.userHandshake = opts.handshake;
if (opts.heartbeat) {
this.heartbeatSec = opts.heartbeat;
this.heartbeat = opts.heartbeat * 1000;
}
this.checkClient = opts.checkClient;
this.useDict = opts.useDict;
this.useProtobuf = opts.useProtobuf;
this.useCrypto = opts.useCrypto;
}
handle(socket, msg) {
if (!msg.sys) {
processError(socket, CODE_USE_ERROR);
return;
}
if (typeof this.checkClient === 'function') {
if (!msg || !msg.sys || !this.checkClient(msg.sys.type, msg.sys.version)) {
processError(socket, CODE_OLD_CLIENT);
return;
}
}
let opts = {
heartbeat: setupHeartbeat(this)
};
if (this.useDict) {
let dictVersion = omelop_1.omelop.app.components.__dictionary__.getVersion();
if (!msg.sys.dictVersion || msg.sys.dictVersion !== dictVersion) {
// may be deprecated in future
opts.dict = omelop_1.omelop.app.components.__dictionary__.getDict();
// 用不到这个。
// opts.routeToCode = omelop.app.components.__dictionary__.getDict();
// opts.codeToRoute = omelop.app.components.__dictionary__.getAbbrs();
opts.dictVersion = dictVersion;
}
opts.useDict = true;
}
if (this.useProtobuf) {
let protoVersion = omelop_1.omelop.app.components.__protobuf__.getVersion();
if (!msg.sys.protoVersion || msg.sys.protoVersion !== protoVersion) {
opts.protos = omelop_1.omelop.app.components.__protobuf__.getProtos();
}
opts.useProto = true;
}
if (!!omelop_1.omelop.app.components.__decodeIO__protobuf__) {
if (!!this.useProtobuf) {
throw new Error('protobuf can not be both used in the same project.');
}
let component = omelop_1.omelop.app.components.__decodeIO__protobuf__;
let version = component.getVersion();
if (!msg.sys.protoVersion || msg.sys.protoVersion < version) {
opts.protos = component.getProtos();
}
opts.useProto = true;
}
if (this.useCrypto) {
omelop_1.omelop.app.components.__connector__.setPubKey(socket.id, msg.sys.rsa);
}
if (typeof this.userHandshake === 'function') {
this.userHandshake(msg, function (err, resp) {
if (err) {
process.nextTick(function () {
processError(socket, CODE_USE_ERROR);
});
return;
}
process.nextTick(function () {
response(socket, opts, resp);
});
}, socket);
return;
}
process.nextTick(function () {
response(socket, opts);
});
}
}
exports.HandshakeCommand = HandshakeCommand;
let setupHeartbeat = function (self) {
return self.heartbeatSec;
};
let response = function (socket, sys, resp) {
let res = {
code: CODE_OK,
sys: sys
};
if (resp) {
res.user = resp;
}
socket.handshakeResponse(omelop_protocol_1.Package.encode(omelop_protocol_1.Package.TYPE_HANDSHAKE, Buffer.from(JSON.stringify(res))));
};
let processError = function (socket, code) {
let res = {
code: code
};
socket.sendForce(omelop_protocol_1.Package.encode(omelop_protocol_1.Package.TYPE_HANDSHAKE, Buffer.from(JSON.stringify(res))));
process.nextTick(function () {
socket.disconnect();
});
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFuZHNoYWtlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vbGliL2Nvbm5lY3RvcnMvY29tbWFuZHMvaGFuZHNoYWtlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHlDQUFzQztBQUN0QyxxREFBMEM7QUFHMUMsSUFBSSxPQUFPLEdBQUcsR0FBRyxDQUFDO0FBQ2xCLElBQUksY0FBYyxHQUFHLEdBQUcsQ0FBQztBQUN6QixJQUFJLGVBQWUsR0FBRyxHQUFHLENBQUM7QUFjMUI7Ozs7Ozs7R0FPRztBQUNILE1BQWEsZ0JBQWdCO0lBU3pCLFlBQVksSUFBNkI7UUFDckMsSUFBSSxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7UUFDbEIsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO1FBRXBDLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUNoQixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7WUFDbkMsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztTQUMxQztRQUVELElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQztRQUVwQyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7UUFDNUIsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO1FBQ3BDLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUNwQyxDQUFDO0lBRUQsTUFBTSxDQUFDLE1BQWUsRUFBRSxHQUFRO1FBQzVCLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFO1lBQ1YsWUFBWSxDQUFDLE1BQU0sRUFBRSxjQUFjLENBQUMsQ0FBQztZQUNyQyxPQUFPO1NBQ1Y7UUFFRCxJQUFJLE9BQU8sSUFBSSxDQUFDLFdBQVcsS0FBSyxVQUFVLEVBQUU7WUFDeEMsSUFB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