proteus-js-client
Version:
Proteus JavaScript Client
119 lines (90 loc) • 3.9 kB
JavaScript
/**
* Copyright (c) 2017-present, Netifi Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*
*/
'use strict';
/* eslint-disable consistent-return, no-bitwise */
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.encodeGroupFrame = encodeGroupFrame;
exports.decodeGroupFrame = decodeGroupFrame;
var _Frame = require('./Frame');
var _FrameHeaderFlyweight = require('./FrameHeaderFlyweight');
var _rsocketCore = require('rsocket-core');
var GROUP_LENGTH_SIZE = 4;
var METADATA_LENGTH_SIZE = 4;
var KEY_LENGTH_SIZE = 4;
var VALUE_LENGTH_SIZE = 4;
function encodeGroupFrame(frame) {
var groupLength = _rsocketCore.UTF8Encoder.byteLength(frame.group);
var metadataLength = _rsocketCore.BufferEncoder.byteLength(frame.metadata);
var tagsLength = Object.entries(frame.tags).reduce(function (acc, _ref) {
var key = _ref[0],
value = _ref[1];
var keyLength = _rsocketCore.UTF8Encoder.byteLength(key);
var valueLength = _rsocketCore.UTF8Encoder.byteLength(value);
return acc + KEY_LENGTH_SIZE + keyLength + VALUE_LENGTH_SIZE + valueLength;
}, 0);
var buffer = (0, _rsocketCore.createBuffer)(_FrameHeaderFlyweight.FRAME_HEADER_SIZE + GROUP_LENGTH_SIZE + groupLength + METADATA_LENGTH_SIZE + metadataLength + tagsLength);
var offset = (0, _FrameHeaderFlyweight.encodeFrameHeader)(buffer, frame);
offset = buffer.writeUInt32BE(groupLength, offset);
offset = _rsocketCore.UTF8Encoder.encode(frame.group, buffer, offset, offset + groupLength);
offset = buffer.writeUInt32BE(metadataLength, offset);
offset = _rsocketCore.BufferEncoder.encode(frame.metadata, buffer, offset, offset + metadataLength);
Object.entries(frame.tags).forEach(function (_ref2) {
var key = _ref2[0],
value = _ref2[1];
var keyLength = _rsocketCore.UTF8Encoder.byteLength(key);
var valueLength = _rsocketCore.UTF8Encoder.byteLength(value);
offset = buffer.writeUInt32BE(keyLength, offset);
offset = _rsocketCore.UTF8Encoder.encode(key, buffer, offset, offset + keyLength);
offset = buffer.writeUInt32BE(valueLength, offset);
offset = _rsocketCore.UTF8Encoder.encode(value, buffer, offset, offset + valueLength);
});
return buffer;
}
function decodeGroupFrame(buffer, majorVersion, minorVersion) {
var offset = _FrameHeaderFlyweight.FRAME_HEADER_SIZE;
var groupLength = buffer.readUInt32BE(offset);
offset += GROUP_LENGTH_SIZE;
var group = _rsocketCore.UTF8Encoder.decode(buffer, offset, offset + groupLength);
offset += groupLength;
var metadataLength = buffer.readUInt32BE(offset);
offset += METADATA_LENGTH_SIZE;
var metadata = _rsocketCore.BufferEncoder.decode(buffer, offset, offset + metadataLength);
offset += metadataLength;
var tags = {};
while (offset < buffer.length) {
var keyLength = buffer.readUInt32BE(offset);
offset += KEY_LENGTH_SIZE;
var key = _rsocketCore.UTF8Encoder.decode(buffer, offset, offset + keyLength);
offset += keyLength;
var valueLength = buffer.readUInt32BE(offset);
offset += VALUE_LENGTH_SIZE;
var value = _rsocketCore.UTF8Encoder.decode(buffer, offset, offset + valueLength);
offset += valueLength;
tags[key] = value;
}
return {
type: _Frame.FrameTypes.GROUP,
majorVersion: majorVersion,
minorVersion: minorVersion,
group: group,
metadata: metadata,
tags: tags
};
}