async _processResponse()

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);
            }
        }
    }