diffusion
Version:
Diffusion JavaScript client
85 lines (69 loc) • 2.94 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 SetStream = require('topic-update/set-stream');
var InvalidUnsetStream = require('topic-update/invalid-unset-stream');
var UpdateStreamRequest = require('services/topic-update/update-stream-request');
var ValidatedStream = _implements(
api.UpdateStream,
function ValidatedStream(streamServices, options, stream, streamId) {
this.set = function(value) {
options.checkOperation(value);
var emitter = new Emitter();
var result = new Result(emitter);
stream.setDelegate(new SetStream(streamServices, options, stream, streamId, value));
var buffer = options.dataType.from(value).asBuffer();
streamServices.STREAM_SET_TOPIC_SERVICE.send(
new UpdateStreamRequest(streamId, buffer),
function(err, streamId) {
if (err) {
logger.debug('Stream set topic failed');
stream.onSetFailed(err);
emitter.error(err);
}
else {
stream.onSetComplete(streamId);
emitter.emit('complete', TopicCreationResult.EXISTS);
}
}
);
return result;
};
this.get = function() {
throw new Error("The set method has not been called");
};
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() {
throw new Error("The set method has not been called");
};
this.onSetFailed = function() {
throw new Error("The set method has not been called");
};
this.onValidateComplete = function() {
};
this.onValidateFailed = function(err) {
stream.setDelegate(new InvalidUnsetStream(err));
};
}
);
module.exports = ValidatedStream;