obniz
Version:
obniz sdk for javascript
89 lines (88 loc) • 3.14 kB
JavaScript
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.Signaling = void 0;
/**
* @packageDocumentation
*
* @ignore
*/
// let debug = require('debug')('signaling');
const debug = () => {
// do nothing.
};
const eventemitter3_1 = __importDefault(require("eventemitter3"));
/**
* @ignore
*/
const CONNECTION_PARAMETER_UPDATE_REQUEST = 0x12;
/**
* @ignore
*/
const CONNECTION_PARAMETER_UPDATE_RESPONSE = 0x13;
/**
* @ignore
*/
const SIGNALING_CID = 0x0005;
/**
* @ignore
*/
class Signaling extends eventemitter3_1.default {
constructor(handle, aclStream) {
super();
this.connectionParameterUpdateAccept = true;
this._handle = handle;
this._aclStream = aclStream;
this.onAclStreamDataBinded = this.onAclStreamData.bind(this);
this.onAclStreamEndBinded = this.onAclStreamEnd.bind(this);
this._aclStream.on('data', this.onAclStreamDataBinded);
this._aclStream.on('end', this.onAclStreamEndBinded);
}
onAclStreamData(cid, data) {
if (cid !== SIGNALING_CID) {
return;
}
debug('onAclStreamData: ' + data.toString('hex'));
const code = data.readUInt8(0);
const identifier = data.readUInt8(1);
const length = data.readUInt16LE(2);
const signalingData = data.slice(4);
debug('\tcode = ' + code);
debug('\tidentifier = ' + identifier);
debug('\tlength = ' + length);
if (code === CONNECTION_PARAMETER_UPDATE_REQUEST) {
this.processConnectionParameterUpdateRequest(identifier, signalingData);
}
}
onAclStreamEnd() {
this._aclStream.removeListener('data', this.onAclStreamDataBinded);
this._aclStream.removeListener('end', this.onAclStreamEndBinded);
}
processConnectionParameterUpdateRequest(identifier, data) {
const minInterval = data.readUInt16LE(0) * 1.25;
const maxInterval = data.readUInt16LE(2) * 1.25;
const latency = data.readUInt16LE(4);
const supervisionTimeout = data.readUInt16LE(6) * 10;
debug('\t\tmin interval = ', minInterval);
debug('\t\tmax interval = ', maxInterval);
debug('\t\tlatency = ', latency);
debug('\t\tsupervision timeout = ', supervisionTimeout);
const response = Buffer.alloc(6);
response.writeUInt8(CONNECTION_PARAMETER_UPDATE_RESPONSE, 0); // code
response.writeUInt8(identifier, 1); // identifier
response.writeUInt16LE(2, 2); // length
if (this.connectionParameterUpdateAccept) {
response.writeUInt16LE(0, 4); // accept
}
else {
response.writeUInt16LE(1, 4); // reject
}
this._aclStream.write(SIGNALING_CID, response);
if (this.connectionParameterUpdateAccept) {
this.emit('connectionParameterUpdateRequest', this._handle, minInterval, maxInterval, latency, supervisionTimeout);
}
}
}
exports.Signaling = Signaling;