in src/internal/ClientSocket.ts [254:310]
async _processResponse(message: Buffer) {
if (this._state === STATE.DISCONNECTED) {
return;
}
if (this._buffer) {
this._buffer.concat(message);
this._buffer.position = this._offset;
}
else {
this._buffer = MessageBuffer.from(message, 0);
}
while (this._buffer && this._offset < this._buffer.length) {
const buffer = this._buffer;
// Response length
const length = buffer.readInteger() + BinaryUtils.getSize(BinaryUtils.TYPE_CODE.INTEGER);
if (buffer.length < this._offset + length) {
break;
}
this._offset += length;
let requestId;
const isHandshake = this._state === STATE.HANDSHAKE;
if (isHandshake) {
// Handshake status
requestId = this._handshakeRequestId.toString();
}
else {
// Request id
requestId = buffer.readLong().toString();
}
this._logMessage(requestId, false, buffer.getSlice(this._offset - length, length));
if (this._offset === buffer.length) {
this._buffer = null;
this._offset = 0;
}
if (this._requests.has(requestId)) {
const request = this._requests.get(requestId);
this._requests.delete(requestId);
if (isHandshake) {
await this._finalizeHandshake(buffer, request);
}
else {
await this._finalizeResponse(buffer, request);
}
}
else {
throw IgniteClientError.internalError('Invalid response id: ' + requestId);
}
}
}