diffusion
Version:
Diffusion JavaScript client
44 lines (34 loc) • 1.29 kB
JavaScript
var TopicCacheEntry = require('routing/topic-cache-entry');
module.exports = function DatatypeCacheEntry(streams, path, details, specification, datatype) {
TopicCacheEntry.call(this, streams, path, details, specification);
var value;
var buffer;
this.handleValue = function(received, registry, errorHandler) {
var oldValue = value;
try {
value = datatype.readValue(received);
buffer = received;
this.notifyValue(received, oldValue, value, registry);
} catch (e) {
errorHandler(e);
}
};
this.handleDelta = function(received, registry, errorHandler) {
var oldValue = value;
var deltaType;
try {
deltaType = datatype.deltaType("binary");
var delta = deltaType.readDelta(received);
value = deltaType.apply(oldValue, delta);
buffer = datatype.writeValue(value);
this.notifyDelta(received, delta, oldValue, value, registry);
} catch (e) {
errorHandler(e);
}
};
this.notifyValueToNewStream = function(path, details, specification, stream) {
if (buffer) {
stream.onValue(path, details, specification, buffer, null, value);
}
};
};