UNPKG

proteus-js-client

Version:

Proteus JavaScript Client

119 lines (90 loc) 3.93 kB
/** * 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.encodeBroadcastFrame = encodeBroadcastFrame; exports.decodeBroadcastFrame = decodeBroadcastFrame; 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 encodeBroadcastFrame(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 decodeBroadcastFrame(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.BROADCAST, majorVersion: majorVersion, minorVersion: minorVersion, group: group, metadata: metadata, tags: tags }; }