diffusion
Version:
Diffusion JavaScript client
51 lines (41 loc) • 1.33 kB
JavaScript
var DetailType = require('../../../client/session-details').DetailType;
var ClientLocationSerialiser = require('./client-location-serialiser');
var ClientSummarySerialiser = require('./client-summary-serialiser');
var Codec = require('io/codec');
function nextOption(bis) {
var r = Codec.readByte(bis);
if (r === 1) {
return true;
} else if (r === 0) {
return false;
} else {
throw new Error('Invalid option byte: ' + r);
}
}
module.exports = {
read : function(bis) {
var details = {
available : []
};
if (!nextOption(bis)) {
return details;
}
if (nextOption(bis)) {
details.available.push(DetailType.SUMMARY);
details.summary = ClientSummarySerialiser.read(bis);
}
if (nextOption(bis)) {
details.available.push(DetailType.LOCATION);
details.location = ClientLocationSerialiser.read(bis);
}
if (nextOption(bis)) {
details.available.push(DetailType.CONNECTOR_NAME);
details.connector = Codec.readString(bis);
}
if (nextOption(bis)) {
details.available.push(DetailType.SERVER_NAME);
details.server = Codec.readString(bis);
}
return details;
}
};