diffusion
Version:
Diffusion JavaScript client
85 lines (68 loc) • 2.7 kB
JavaScript
var _implements = require('util/interface')._implements;
var api = require('../../topic-update/update-stream');
var TopicCreationResult = require('../../topic-update/topic-update').TopicCreationResult;
var Emitter = require('events/emitter');
var Result = require('events/result');
var logger = require('util/logger').create('diffusion.locks.TopicUpdate');
var InvalidSetStream = require('topic-update/invalid-set-stream');
var UpdateStreamRequest = require('services/topic-update/update-stream-request');
var SetStream = _implements(
api.UpdateStream,
function SetStream(streamServices, options, stream, streamId, value) {
var cache = value;
this.set = function(value) {
options.checkOperation(value);
var emitter = new Emitter();
var result = new Result(emitter);
var buffer = options.toBuffer(cache, value);
cache = value;
options.deltaService.send(
new UpdateStreamRequest(streamId, buffer),
function(err, streamId) {
if (err) {
logger.debug('Set update stream failed');
stream.onSetFailed(err);
emitter.error(err);
}
else {
stream.onSetComplete(streamId);
emitter.emit('complete', TopicCreationResult.EXISTS);
}
}
);
return result;
};
this.get = function() {
return cache;
};
this.validate = function() {
var emitter = new Emitter();
var result = new Result(emitter);
streamServices.CHECK_UPDATE_STREAM.send(streamId,
function(err, result) {
if (err) {
logger.debug('Validate update stream failed');
stream.onValidateFailed(err);
emitter.error(err);
}
else {
stream.onValidateComplete(result);
emitter.emit('complete', TopicCreationResult.EXISTS);
}
}
);
return result;
};
this.onSetComplete = function() {
};
this.onSetFailed = function(err) {
stream.setDelegate(new InvalidSetStream(err, cache));
};
this.onValidateComplete = function() {
};
this.onValidateFailed = function(err) {
stream.setDelegate(new InvalidSetStream(err, cache));
};
}
);
module.exports = SetStream;