UNPKG

diffusion

Version:

Diffusion JavaScript client

65 lines (53 loc) 2.02 kB
var BufferInputStream = require('io/buffer-input-stream'); var BEES = require('serialisers/byte-encoded-enum-serialiser'); var SessionId = require('session/session-id'); var SessionTokenDeserialiser = require('session/session-token-deserialiser'); var ResponseCode = require('protocol/response-code'); var consts = require('protocol/consts'); /* * Deserialise connection responses according to the V5 protocol. */ function deserialise(buffer) { var input = new BufferInputStream(buffer); var protocol = input.read(); if (protocol !== consts.PROTOCOL_BYTE) { throw new Error('Unrecognised protocol byte: ' + protocol); } var version = input.read(); if (version < consts.CURRENT_VERSION) { throw new Error('Unrecognised protocol version: ' + version); } else if (version > consts.CURRENT_VERSION) { throw new Error('Unsupported protocol version: ' + version); } var responseCode = BEES.read(input, ResponseCode); if (ResponseCode.isSuccess(responseCode)) { // For some reason we serialise session ids as unsigned longs here var sessionID = new SessionId(input.readUInt64(), input.readUInt64()); var sessionToken = SessionTokenDeserialiser(input); var systemPingPeriod = input.readInt64(); var recoverySequence = 0; if (responseCode === ResponseCode.RECONNECTED) { recoverySequence = input.readInt32(); } return { response : responseCode, identity : sessionID, token : sessionToken, systemPingPeriod : systemPingPeriod, version : version, success : true, sequence : recoverySequence }; } else { return { response : responseCode, version : version, identity : null, token : null, systemPingPeriod : null, success : false, sequence : 0 }; } } module.exports = deserialise;